这是我在StackOverflow上的第一个问题。2如果我做错了什么,让我知道如何改进下一个问题。
我从RMarkdown开始,我在用for循环打印记录的图时遇到了一些麻烦。在运行RMarkdown文件之前,我运行了一个R函数,它生成了一个包含几个 Dataframe 和图的列表。
为了使它更容易,我在这里放了一个简单的可复制的例子,这个列表只是与绘图对象。
x <- c(1,2,3,4,5)
y <- c(1,2,3,4,5)
plot(x,y)
abline(h=1)
p1.1 <- recordPlot()
plot(x,y)
abline(h=3)
p1.2 <- recordPlot()
plot(x,y)
abline(h=4)
p2.1 <- recordPlot()
plot(x,y)
abline(h=6)
p2.2 <- recordPlot()
lista<-NULL
lista["p1.1"] <- list(p1.1)
lista["p1.2"] <- list(p1.2)
lista["p2.1"] <- list(p2.1)
lista["p2.2"] <- list(p2.2)
save(new_list, file = "Data.RData")
然后我把这个列表加载到R Markdown文件中,如下所示:
```{r setup}
knitr::opts_chunk$set(echo = TRUE,fig.keep = "all")
load("Data.RData")```
我试着把这些图打印成这样
```{r,echo=FALSE, results='asis',fig.keep='all'}
for (i in c(1,2)){
for(j in c(1,2)){
print(lista[[paste(paste("p",i,sep=""),j,sep=".")]])
}
}```
当我运行Knitr获取HTML文件时,结果是只显示了for循环的最后一个图。
我试过用lapply代替for循环,但它对我不起作用。我也试过用replayplot函数print(replayPlot(lista[[paste(paste(paste("p",i,sep=""),".",sep=""),j,sep="")]]))
,结果也一样。
有没有办法解决这个问题而不修改以前生成绘图列表的R函数?
谢谢你的回答。
2条答案
按热度按时间pepwfjgg1#
对于
ggplot
对象的列表,您使用的语法可能没有问题,但对于基本plot
对象,您需要调用plot.new()
,以便列表中的下一个图不会覆盖前一个图:Print list
for(p in lista) {
plot.new()
print(p)
}
yruzcnhs2#
你不需要一个循环来绘制保存在列表中的每一个ggplot。