我正在使用Rstudio中的rmarkdown文档,我注意到代码块中R代码的内联R代码的行为存在一些差异。例如,如果我在代码块中使用函数lubridate::now()
,我会看到在编织Rmd文档时将时区附加到输出。但是,当我使用相同的R代码(即lubridate::now()
)作为内联代码并编织文档时,我发现时区不包含在输出中。你能帮助我理解这种差异吗?
感谢。
答案 0 :(得分:6)
内联代码通过一个附加层 - “内联”钩子。来自knitr manual:
- 对于每个块,使用评估包(Wickham,2016)和结果评估代码 可以根据块选项进行过滤(例如echo = FALSE将删除R源代码)...
- 对于普通文本,knitr将找到内联R代码(例如在\ Sexpr {}中)并对其进行评估;输出由内联钩子包裹;
醇>
可以通过以下方式检查inline hook:
> 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"
请注意,内联输出与块的第三行输出匹配。无论如何,这是我最好的猜测。
答案 1 :(得分:0)
对于内联代码,装饰&#39;被删除,以便您可以在句子中使用计算值。 无论是否显示结果,这些块都可以让您进行大量处理。如果代码和响应在文档中可见,您可以将其直接复制并粘贴到控制台中并比较结果。