Fre*_*ehm 3 r knitr r-markdown
我正在使用Rstudio中的rmarkdown文档,我注意到代码块中R代码的内联R代码的行为存在一些差异.例如,如果我lubridate::now()在代码块中使用该函数,我会看到在编织Rmd文档时将时区附加到输出.但是,当我使用相同的R代码,即lubridate::now()内联代码和编织文档时,我看到时区不包含在输出中.你能帮助我理解这种差异吗?
谢谢.
内联代码通过一个附加层 - "内联"钩子.从knitr手册:
- 对于每个块,使用evaluate包(Wickham,2016)评估代码,并且可以根据块选项过滤结果(例如echo = FALSE将删除R源代码)...
- 对于普通文本,knitr会找到内联R代码(例如在\ Sexpr {}中)并对其进行评估; 输出由内联钩子包裹;
的内联钩可通过被检查:
> knitr::knit_hooks$get("inline")
function (x)
{
if (is.numeric(x))
x = round_digits(x)
paste(as.character(x), collapse = ", ")
}
<environment: namespace:knitr>
Run Code Online (Sandbox Code Playgroud)
如果您的rmd文件是:
inline date: `r lubridate::now()`
```{r, echo=F}
lubridate::now()
print(lubridate::now())
paste(as.character(lubridate::now()), collapse = ", ")
```
Run Code Online (Sandbox Code Playgroud)
输出是:
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"
Run Code Online (Sandbox Code Playgroud)
请注意,内联输出与块的第三行输出匹配.无论如何,这是我最好的猜测.