[英]Knitr: one plot per .tabset in for-loop
長話短說,我正在嘗試使用knitr動態創建單獨的tabsets並在每個tabset中渲染一個圖。 以下是我失敗嘗試的說明。 我會很感激解決方案,但我懷疑我只是不理解knitr渲染輸出的基本方式。 因此,如果您可以向我指出資源或提供一些概念性指導,那么也將不勝感激。
動態創建標簽集很容易。 這是我的.R文件
#' ---
#' title:
#' author:
#' date:
#' output:
#' html_document
#' ---
#' # {.tabset}
#+ results='asis', echo=FALSE
for(i in 1:10){
cat('##',i,' \n')
}
當我在這個.R文件上調用rmarkdown :: render()時,我得到10個空的tabsets(見下文)。 我不確定貓做了什么或為什么\\ n是必要的(這是一些概念性的解釋將被欣賞),但它的工作原理。 現在我添加了對for循環的boxplot()調用,並期望在每個tabset上獲得相同的boxplot。
#' ---
#' title:
#' author:
#' date:
#' output:
#' html_document
#' ---
#' # {.tabset}
#+ results='asis', echo=FALSE
for(i in 1:10){
cat('##',i,' \n')
boxplot(iris$Sepal.Length~iris$Species)
}
如果我添加另一個帶有兩個“\\ n”字符的cat(),則會顯示所有選項卡,但只有第二個選項卡會填充圖表。 其他選項卡為空。
#' ---
#' title:
#' author:
#' date:
#' output:
#' html_document
#' ---
#' # {.tabset}
#+ results='asis', echo=FALSE
for(i in 1:10){
cat('##',i,' \n')
boxplot(iris$Sepal.Length~iris$Species)
cat(' \n \n')
}
所以我找到了一個解決方案,但仍然不知道它為什么會起作用。 非常感謝任何反饋。 在每個plot()之前添加plot.new()。
#' ---
#' title:
#' author:
#' date:
#' output:
#' html_document
#' ---
#' # {.tabset}
#+ results='asis', echo=FALSE
for(i in 1:10){
cat('##',i,' \n')
plot.new()
boxplot(iris$Sepal.Length~iris$Species)
cat(' \n \n')
}
我不確定,但基於這些模式,我會說像大多數R的原生繪圖功能那樣的boxplot
彼此“過度繪制”。 所以, rmarkdown::render
只會看到生成一個數字。 通過調用plot.new
你告訴R''敲定'當前的情節,然后開始將情節輸出寫入新情節。 這導致十個不同的圖。
我認為有用的提示也可能有用:在調試/故障排除/確定rmarkdown::render
和R Markdown的動態時,它還可以幫助檢查'原始'Markdown輸出。 您可以通過在YAML標頭中包含keep_md: TRUE
來告訴rmarkdown::render
保留此文件(有關示例和更多信息,請參閱** Advance http://rmarkdown.rstudio.com/html_document_format.html )。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.