【问题标题】:rmarkdown inline code vs. code chunkrmarkdown 内联代码与代码块
【发布时间】:2017-12-08 04:42:37
【问题描述】:

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

谢谢。

【问题讨论】:

    标签: r knitr r-markdown


    【解决方案1】:

    对于内联代码,删除了“装饰”,以便您可以在句子中使用计算值。 这些块让您可以进行大量处理,无论是否显示结果。如果代码和响应在文档中可见,您可以将其复制并直接粘贴到控制台并比较结果。

    【讨论】:

      【解决方案2】:

      内联代码通过一个附加层——“内联”挂钩。来自knitr manual:

      1. 对于每个块,代码使用评估包(Wickham,2016)进行评估,结果 可以根据块选项进行过滤(例如 echo=FALSE 将删除 R 源代码)...
      2. 对于普通文本,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"
      

      注意内联输出与块的第三行输出相匹配。无论如何,这是我最好的猜测。

      【讨论】:

      • 非常感谢 - 这正是我想知道的!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-20
      • 1970-01-01
      • 1970-01-01
      • 2017-07-07
      • 1970-01-01
      • 2023-02-01
      • 1970-01-01
      相关资源
      最近更新 更多