如何在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-Markdown 中使用 knitr 和 kableExtra 的表格单元格中的乳胶公式或符号,