R 分配循环不适用于绘图

R 分配循环不适用于绘图,r,ggplot2,assign,R,Ggplot2,Assign,循环的每次迭代都会创建一个新的plotx。运行printplotx时,它会生成一个不同的图形 然后我使用assign调用每个绘图plotx1、plotx2等,将每个绘图另存为一个单独的名称。 然后,当我绘制名称时,它们都与Y=c相同,但Y轴正确地标记为回路的原始Y!发生什么事了? 我如何纠正这个问题 dat = data.frame("d"= rep(c("bla1","bla2","bla3"),3),"a" = c(1:9), "b"= c(19:11), "c"=rep(c(3,2,2)

循环的每次迭代都会创建一个新的plotx。运行printplotx时,它会生成一个不同的图形

然后我使用assign调用每个绘图plotx1、plotx2等,将每个绘图另存为一个单独的名称。 然后,当我绘制名称时,它们都与Y=c相同,但Y轴正确地标记为回路的原始Y!发生什么事了? 我如何纠正这个问题

dat = data.frame("d"= rep(c("bla1","bla2","bla3"),3),"a" = c(1:9), "b"= 
c(19:11), "c"=rep(c(3,2,2),3))

X = "d"
listY = c("a","b","c")
z= 0
for (Y in listY){
  z= z+1
plotx= ggplot(dat,
     aes(x = dat[[X]], y = dat[[Y]])) +
     geom_boxplot() +
     scale_x_discrete(X) +
     scale_y_continuous(Y)+
     theme_bw()
 print(plotx)

 plot_name = paste0("plotx",z)
 assign(plot_name , plotx)
   }
plotx1
plotx2
plotx3

@Roland解释了这种行为的原因。如果以后要访问这些图,则应使用列表来存储这些图。此外,在传递x和y的字符串时,应该使用aes_字符串而不是aes。以下是工作代码:

dat = data.frame("d"= rep(c("bla1","bla2","bla3"),3),"a" = c(1:9), "b"= 
                   c(19:11), "c"=rep(c(3,2,2),3))

X = "d"
listY = c("a","b","c")
z= 0
plots <- list()
for (Y in listY){
  z= z+1

  plotx <-  ggplot(dat,
                aes_string(x = dat[[X]], y = dat[[Y]])) +
                geom_boxplot() +
                scale_x_discrete(X) +
                scale_y_continuous(Y)+
                theme_bw()
  plot_name <- paste0("plotx",z)
  plots[[plot_name]] <- plotx

}

然后,您可以使用plots[plotx1]

单独打印它们打印时,打印是新构建的。在循环之后,Y的值是listY中的最后一个值。您有几个选项:可以替换dat[[Y]],也可以将ggplot对象转换为grob。这是在循环外获得相同绘图的正确原因。如果这是一个新问题,很抱歉,但如何将绘图称为COWPROOT?当我尝试运行plot.gridplots[1],plots[2]时,它不会将它们识别为plots将其配置出来我需要使用plot\u gridplotlist=plots\u string使其成为plots,这样您就不需要像dat[[X]]那样编码,而是可以直接引用变量。所以在这种情况下,它可能看起来像aes_stringx=X,y=y。