r - knitr可以根据每个chunk中的R代码结果动态输出叙述文本吗?

标签 r knitr r-markdown

我正在考虑开发一个 .rmd 文件,该文件可以根据前面的 R 结果在输出文件(.html、.pdf、...)中动态写入一些叙述 block 。简单地说,我希望它是如何工作的:

```{r,echo=F,include=FALSE}
x=1;

```
##if x=1 then output text below
text1

##if x=2 then output text below
text2

.....

最佳答案

knitr处理一个文档,文档被分成两类输入:普通文本和代码块。普通文本保持不变并传递到输出文件。因此,如果应该动态包含纯文本,则它必须位于 block 内。

代码块根据它们的 options 进行评估.在当前情况下,最重要的选项是:

  • eval
  • echo
  • results
  • engine
  • eval确定是否评估 block ; eval = FALSE跳过 block 。 echo决定是否显示 block 的源代码。 results确定如何处理 block 的输出。默认情况下(results = "markup),输出 Hook 用于将特定于文档类型的标记应用于输出。 results = "asis"表示所有输出都“按原样”包含在输出文件中,没有任何修改。

    通过这三个选项,可以完成以下任务:
    This is some text ...
    
    ```{r, echo = FALSE, eval = FALSE, results = "asis"}
    cat("... with a secret inside ...")
    ```
    
    ```{r, echo = FALSE, eval = TRUE, results = "asis"}
    cat("... that is dynamically generated.")
    ```
    

    输出:
    This is some text ...
    
    
    
    ... that is dynamically generated.
    

    请注意,不评估第一个 block ,因为 eval = FALSE .

    但是,cat() 比较麻烦来自 R block 的大量文本。 engine可以用来克服这个。除了R,还有other engines可用于评估 block ,其中(当前未记录?)引擎asis .这个引擎非常简单。来自 knitr NEWS file :

    added a new engine named asis to write the chunk content without processing it; it also respects the chunk options echo and eval -- when either one is FALSE, the chunk will be hidden; this makes it possible to write text conditionally



    结合asis具有以下语法糖的引擎 (source)

    for language engines, the syntax of R Markdown code chunk headers can be ```{lang, option=value}` now (e.g. ```{python} and ```{Rcpp}), which is equivalent to ```{r, engine='lang', option=value}



    上面的例子变成:
    This is some text ...
    
    ```{asis, echo = FALSE}
    ... with a secret inside ...
    ```
    
    ```{asis, echo = TRUE}
    ... that is dynamically generated.
    ```
    

    关于r - knitr可以根据每个chunk中的R代码结果动态输出叙述文本吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34599993/

    相关文章:

    r - 你如何用 R 的 testthat 做测试助手?

    r - 如何将图像渲染成图 block ?

    r - 在 Markdown 文件上使用 knit 但忽略一大块代码 - 采购 knitr 文件

    r - 如何删除 Knit 输出的 xtable 表中的 % 行

    r - 将文字描述放在 kable 旁边

    r - 如何从 Rstudio ioslides 演示文稿中删除标题幻灯片

    r-markdown - 将背景图像添加到 R Markdown (.rmd) 文件以进行 PDF 输出?

    r - facet_grid问题: input string 1 is invalid in this locale?

    list - 使用snowfall::sfLapply 时正在处理哪个列表元素?

    r - 如何通过 r markdown html 在 html 文档中设置语言