长话短说,我正在尝试使用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是必需的(这是一些概念上的解释会被理解的地方),但是它确实有效。
现在,我将一个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)
}
但是,第一个选项卡显示为空,第二个选项卡显示了该输出。
如果我添加另一个带有两个“ \ 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')
}