【问题标题】:how to create a loop that includes both a code chunk and text with knitr in R如何在R中使用knitr创建一个包含代码块和文本的循环
【发布时间】:2016-07-22 06:45:21
【问题描述】:

我试图弄清楚如何创建一个循环,将一些文本插入到 rmarkdown 文件中,然后生成与该标题对应的图形或表格。以下是我如何想象它的工作方式:

for(i in 1:max(month)){
### `r month.name[i]` Air quaility

```{r, echo=FALSE}
plot(airquality[airquality$Month == 5,])
```
}

这当然只是将 for 循环打印为文本,如果我用 r`` 包围 for 循环,我只会得到一个错误。

我希望代码生成一个如下所示的 rmd 文件:

五月空气质量

剧情

六月空气质量

情节

等等等等。有任何想法吗?我不能使用乳胶,因为我在工作中他们不让我们下载 exe 文件,而且我也不知道如何使用乳胶。我想制作一个word文档。

【问题讨论】:

    标签: r loops knitr


    【解决方案1】:

    您可以使用 cat() 在循环中嵌入降价。

    注意:您需要设置results="asis" 才能将文本呈现为降价。 请注意:\n 换行符前面需要两个空格,以使 knitr 在出现绘图的情况下正确渲染降价。

    # Monthly Air Quality Graphs
    ```{r pressure,fig.width=6,echo=FALSE,message=FALSE,results="asis"}
    
    attach(airquality)
    for(i in unique(Month)) {
      cat("  \n###",  month.name[i], "Air Quaility  \n")
      #print(plot(airquality[airquality$Month == i,]))
      plot(airquality[airquality$Month == i,])
      cat("  \n")
    }
    ```
    

    【讨论】:

    • 哇,这非常有帮助(请标记为正确答案) - 它也回答了这个问题:stackoverflow.com/questions/17178831/…
    • “\n 前面的 2 个空格”记录在哪里?
    • 我在我的 R Notebook 中尝试了这个解决方案,并得到了 5 月空气质量 6 月空气质量图,即我的文本输出全部塞在一个块中,然后图表出现了。有谁知道这是怎么回事?
    • 一个缺点可能是我们现在无法进行交叉引用。
    • 很好的答案。如果试图更接近实际循环一些较长的降价文本的“感觉”,使用多行字符串和胶水包可能会有所帮助: cat(glue("..."))
    【解决方案2】:

    here 所述,您也可以使用pander 包:

    # Monthly Air Quality Graphs
    ```{r pressure2, fig.width=6, echo=FALSE, message=FALSE, results="asis"}
    library(pander)
    for (i in unique(airquality$Month)) {
       # Inserts Month titles
       pander::pandoc.header(month.name[i], level = 3)
       # Section contents
       plot(airquality[airquality$Month == i,])
       # adding also empty lines, to be sure that this is valid Markdown
       pander::pandoc.p('')
       pander::pandoc.p('')
    }
    ```
    

    【讨论】:

    • 对我来说,这应该是简单的答案。到处管理cat(' \n') 被证明很麻烦,如果在一个部分中没有正确定位,会导致整个文档出现一些错误。
    • @andschar 你能看看here吗?看来,你的建议很接近,但我仍然面临传单地图的问题。 (而且我不确定 {.tabset} 是否适用于 pander。)非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-14
    • 2016-02-02
    • 2019-01-12
    • 1970-01-01
    • 2020-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多