簡體   English   中英

Knitr:for循環中每個.tabset一個繪圖

[英]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.

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