R语言 创建同时包含代码块和文本的循环

huwehgph  于 2023-01-28  发布在  其他
关注(0)|答案(4)|浏览(170)

我试图弄清楚如何创建一个循环,将一些文本插入到 * 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文档。
gzszwxb4

gzszwxb41#

您可以使用cat()将减价嵌入到循环中。
注意:你需要设置results="asis",使文本呈现为markdown。您需要在\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")
}
8yparm6h

8yparm6h2#

正如前面提到的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('')
}
qmelpv7a

qmelpv7a3#

在某些情况下,我发现编写一个写块代码的循环编写一个运行循环的块更有帮助。这是一个奇怪的解决方案,但在过去,当我只需要一组基本的块时,它对我来说效果很好。对于airquality的情况,它看起来像这样:

## model chunk ##

# ## May Air Quality
# ```{r May}
# 
# plot(airquality[airquality$Month == 5,])
#
# ```

# all months in airquality
aqmonths <- c("May",
            "June",
            "July",
            "August",
            "September")

for (m in aqmonths) {
  cat(
    paste0(
      "## ", m, " Air Quality",
      "\n\n",
      "```{r ", m, "}",
      "\n\n",
      "plot(airquality[airquality$Month == ", match(m, months), ",])",
      "\n\n",
      "```",
      "\n\n"
    )
  )
}

这将把所有5个块的代码打印到控制台,然后我可以复制并粘贴到.Rmd文档中。还可以在块写入循环中包括任何块选项,如标题或fig参数。根据您尝试引入的其他内容,使用示例中的match()等函数通常很有帮助。

**优点:**保留使用交叉引用和设置单独标题或选项的能力。
**缺点:**对所有块进行更改通常需要重新复制块写入循环的整个输出,这可能会令人厌烦并且有点笨拙。

093gszye

093gszye4#

使用〈〉在循环中重用块怎么样,如下所述:https://bookdown.org/yihui/rmarkdown-cookbook/reuse-chunks.html
标记块,设置eval=F

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

然后循环

for(i in 1:max(month)){
<<my_chunk>>
}

相关问题