簡體   English   中英

創建一個包含代碼塊和文本的循環

[英]Create a loop that includes both a code chunk and text

我想弄清楚如何創建一個循環,將一些文本插入到rmarkdown文件中,然后生成對應於該 header 的圖形或表格。以下是我想象它的工作方式:

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

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

這當然只是將 for 循環打印為文本,如果我用 r`` 包圍 for 循環,我只會得到一個錯誤。

我希望代碼生成如下所示的 rmd 文件:

五月空氣質量

Plot

六月空氣質量

Plot

等等等等。

有任何想法嗎? 我不能使用 latex,因為我在工作時他們不讓我們下載 exe 文件,而且我也不知道如何使用 latex。 我想制作一個word文檔。

您可以使用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")
}
```

正如這里提到的,您還可以使用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('')
}
```

在某些情況下,我發現編寫一個編寫塊代碼的循環而不是編寫一個運行循環的塊很有幫助。 奇怪的解決方案,但在過去,當我只需要一組裸骨塊時,它對我來說非常有效。 對於您的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 arguments。 根據您嘗試引入的其他內容,使用示例中的match()之類的函數通常會有所幫助。

優點:保留使用交叉引用和設置單獨的標題或選項的能力。

缺點:對所有塊進行更改通常需要重新復制塊寫入循環的整個 output,這可能會令人厭煩且有點笨拙。

如何使用 <<label>> 在循環內重用塊,如下所述:https://bookdown.org/yihui/rmarkdown-cookbook/reuse-chunks.html

Label 你的塊,設置 eval=F

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

然后循環

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM