如何在R中使用knitr创建一个包含代码块和文本的循环

Posted

技术标签:

【中文标题】如何在R中使用knitr创建一个包含代码块和文本的循环【英文标题】:how to create a loop that includes both a code chunk and text with knitr in R 【发布时间】: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文档。

【问题讨论】:

【参考方案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")

```

【讨论】:

哇,这非常有帮助(请标记为正确答案) - 它也回答了这个问题:***.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。)非常感谢。

以上是关于如何在R中使用knitr创建一个包含代码块和文本的循环的主要内容,如果未能解决你的问题,请参考以下文章

R,knitr不尊重块和文本的顺序

如何在 knitr::spin 中输出文字反引号

在 R-Markdown 中使用 knitr 和 kableExtra 的表格单元格中的乳胶公式或符号,

使用 R markdown 和 knitr:可以在 YAML 中解释 R 对象

knitr Markdown 在 Emacs 中突出显示?

R- knitr:kable - 如何显示没有列名的表格?