R 在循环内时如何在列表中存储绘图?

R 在循环内时如何在列表中存储绘图?,r,loops,plot,ggplot2,R,Loops,Plot,Ggplot2,我在一个循环中工作,我想将绘图保存在一个列表中,这样我就可以将它们一起绘制在一个.pdf文件中。问题是列表没有正确填写,并使用上次运行的结果重新更新。所以,最后我得到的是一个包含五个完全相同元素的列表 我知道循环可能看起来没用,但我只是让它们创建一个尽可能接近真实代码的测试代码(带有可再现的错误)。所以,我需要让循环保持原样 library (ggplot) library (gridExtra) plist <- list() for (z in 1:5){ n <- 10

我在一个循环中工作,我想将绘图保存在一个列表中,这样我就可以将它们一起绘制在一个.pdf文件中。问题是列表没有正确填写,并使用上次运行的结果重新更新。所以,最后我得到的是一个包含五个完全相同元素的列表

我知道循环可能看起来没用,但我只是让它们创建一个尽可能接近真实代码的测试代码(带有可再现的错误)。所以,我需要让循环保持原样

library (ggplot)
library (gridExtra)

plist <- list()

for (z in 1:5){
  n <- 100
  k <- seq(0, to=4500+z*2000, length=n)
  tmp <- numeric(n)
  for (i in 1:n){
    tmp[i] <- (5*(i*3)^2)}

  plist[[z]] <- ggplot() +
    geom_line(aes(x = k, y = tmp)) +
    theme_bw()

  pdf(sprintf("p%s.pdf", z),
      width = 6, height = 4, onefile = T)
  plot(plist[[z]])
  dev.off()
}

do.call(grid.arrange, c(plist, ncol = 5))
库(ggplot)
图书馆(gridExtra)
plist这个答案基于:

库(ggplot2)
图书馆(gridExtra)

plist您可以在for循环中使用
p[z]
吗?是的,为什么不将绘图保存到列表中?然后你就不需要把它们放在一个列表中一起绘图了。在一个地方你必须分配给sprintf(“p%s”,z),但是当你试图
获取
时,你可以使用“p\u%s”。这就是我试图做的,当我创建listp。。。有更好的方法吗?第一次通过循环时,您尝试获取一个不存在的对象,即错误消息所述的
p2
。您真的想要两个循环:一个用于创建,另一个用于访问绘图?另外:
grid.arrange
不在pkg-ggplot2中。
library(ggplot2)
library(gridExtra)

plist <- list()

for (z in 1:5){
  n <- 100
  k <- seq(0, to=4500+z*2000, length=n)
  tmp <- numeric(n)
  for (i in 1:n){
    tmp[i] <- (5*(i*3)^2)}

  data <- data.frame(n, k, tmp)

  plist[[z]] <- ggplot(data = data) + #data needs to be given!!
    geom_line(aes(x = k, y = tmp)) +
    theme_bw()

  pdf(sprintf("p%s.pdf", z),
      width = 6, height = 4, onefile = T)
  plot(plist[[z]])
  dev.off()
}

do.call(grid.arrange, c(plist, ncol = 5))