rmarkdown内联代码与代码块的区别

3
我正在使用Rstudio中的rmarkdown文档,发现内联R代码与代码块中的R代码行为有所不同。例如,如果我在代码块中使用函数lubridate::now(),则在编译Rmd文档时会将时区附加到输出结果上。然而,当我将相同的R代码即lubridate::now()作为内联代码并编译文档时,我发现输出结果中不包含时区信息。您能帮助我理解这种差异吗?
谢谢。
2个回答

7

内联代码需要通过一个额外的层次——“inline”钩子。根据knitr手册:

  1. 对于每个代码块,使用evaluate包(Wickham, 2016)来评估代码,并且结果可以根据代码块选项进行过滤(例如,echo=FALSE将删除R源代码)...
  2. 对于普通文本,knitr将查找内联R代码(例如,在\Sexpr{}中)并对其进行评估;输出由inline钩子包装;

可以通过内联钩子进行检查。

> knitr::knit_hooks$get("inline")
function (x) 
{
    if (is.numeric(x)) 
        x = round_digits(x)
    paste(as.character(x), collapse = ", ")
}
<environment: namespace:knitr>

如果您的rmd文件如下:
inline date: `r lubridate::now()`

```{r, echo=F}
lubridate::now()
print(lubridate::now())
paste(as.character(lubridate::now()), collapse = ", ")
```

输出结果为:
inline date: 2017-07-04 22:43:42

## [1] "2017-07-04 22:43:42 CDT"
## [1] "2017-07-04 22:43:42 CDT"
## [1] "2017-07-04 22:43:42"

请注意内联输出与代码块的第三行输出匹配。这是我的最佳猜测。


非常感谢 - 这正是我想知道的! - Fred Boehm

0

对于内联代码,'decoration' 被移除,这样你就可以在句子中使用计算出的值。块让你可以进行很多处理,无论是否显示结果。如果代码和响应在文档中可见,你可以直接将其复制粘贴到控制台中并比较结果。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接