长话短说,我正在尝试使用knitr动态创建单独的选项卡集并在每个选项卡集内绘制图。以下是我失败尝试的描述。我希望能找到一个解决方案,但我怀疑我只是不了解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个空选项卡集(请参见下文)。我不太确定猫是做什么的,也不知道为什么\ n是必需的(这是一些概念上的解释会被理解的地方),但是它确实有效。
r - 编织器:for循环中每个.tabset个图-LMLPHP
现在,我将一个boxplot()调用添加到for循环中,并期望在每个选项卡集上获得相同的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)
}


但是,第一个选项卡显示为空,第二个选项卡显示了该输出。
r - 编织器:for循环中每个.tabset个图-LMLPHP

如果我添加另一个带有两个“ \ 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')
}


r - 编织器:for循环中每个.tabset个图-LMLPHP

最佳答案

所以我找到了一个解决方案,但仍然不知道为什么可行。希望得到任何反馈。在每个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')
}

08-20 04:46