rmarkdown内联代码与代码块

时间:2017-07-04 16:21:35

标签: r knitr r-markdown

我正在使用Rstudio中的rmarkdown文档,我注意到代码块中R代码的内联R代码的行为存在一些差异。例如,如果我在代码块中使用函数lubridate::now(),我会看到在编织Rmd文档时将时区附加到输出。但是,当我使用相同的R代码(即lubridate::now())作为内联代码并编织文档时,我发现时区不包含在输出中。你能帮助我理解这种差异吗?

感谢。

2 个答案:

答案 0 :(得分:6)

内联代码通过一个附加层 - “内联”钩子。来自knitr manual

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

可以通过以下方式检查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;被删除,以便您可以在句子中使用计算值。 无论是否显示结果,这些块都可以让您进行大量处理。如果代码和响应在文档中可见,您可以将其直接复制并粘贴到控制台中并比较结果。