Я хотел бы динамически назначить график имени переменной, а затем вызвать эту переменную последним в цикле. Хотя использование «eval» вне цикла, кажется, работает нормально, размещение его внутри цикла останавливает его работу, как ожидалось.
#Sample data frame
x<-c(1,2,3,4,5)
y<-c(5,4,3,2,1)
y2<-c(1,2,3,4,5)
DF<-data.frame(x,y,y2)
#Using ggplot for p and p2
p<-ggplot(DF, aes(x=x, y=y))+
geom_point()
p2<-ggplot(DF, aes(x=x, y=y2))+
geom_point()
#Assign p and p2 to string "Plot1" and "Plot2"
assign(paste0("Plot",1), p )
assign(paste0("Plot",2), p2 )
#Create a list to hold all plot names
plotlist<-c("Plot1", "Plot2")
#Print plots to a pdf
pdf(paste0("Plot", "_Test.pdf"), height =8, width=16)
for(i in seq(1,length(plotlist))){
plotname<-plotlist[i]
plotter<-eval(parse(text=plotname))
plotter
print(plotname)
}
dev.off()
Обратите внимание, что выше не работает. Но если я собираюсь запустить те же операторы eval вне цикла, AKA:
i=1
plotname<-plotlist[i]
plotter<-eval(parse(text=plotname))
plotter
Сюжет создан, как и ожидалось. Есть ли способ вызвать "Eval" в цикле? А как насчет того, чтобы быть в цикле заставляет оператор eval работать по-другому?
Обратите внимание, что, удалив цикл for, он сохраняет (первый) pdf, как и ожидалось:
pdf(paste0("Plot", "_Test.pdf"), height =8, width=16)
#for(i in seq(1,length(plotlist))){
plotname<-plotlist[i]
plotter<-eval(parse(text=plotname))
plotter
print(plotname)
#}
dev.off()