这是一种方法——遍历列索引并一个一个地创建图,将它们添加到列表中并将每个图写入文件:
library(ggplot2)
# create some data to plot
df1 <- iris[, sapply(iris, is.numeric)]
df2 <- iris[sample(1:nrow(iris)), sapply(iris, is.numeric)]
# a list to catch each plot object
plot_list <- vector(mode="list", length=ncol(df1))
for (idx in seq_along(df1)){
plot_list[[idx]] <- ggplot2::qplot(df1[[idx]], df2[[idx]]) +
labs(title=names(df1)[idx])
ggsave(filename=paste0(names(df1)[idx], ".pdf"), plot=plot_list[[idx]])
}
正如您在问题中所建议的,您还可以将s/lapply() 与匿名函数一起使用,例如像这样(虽然这里我们没有存储图,只是将每个图写入磁盘):
lapply(seq_along(df1), function(idx){
the_plot <- ggplot2::qplot(df1[[id]], df2[[idx]]) + labs(title=names(df1)[idx])
ggsave(filename=paste0(names(df1)[idx], ".pdf"), plot=the_plot)
})
如果您想保留绘图列表(如 for-loop 示例中所示),只需将 lapply() 分配给变量(例如 plot_list)并在关闭函数之前添加类似 return(the_plot) 的行.
您可以通过多种方式修改/调整此方法,具体取决于您的目标。
希望对你有所帮助~~
p.s. 如果列的顺序可能不同,最好循环遍历列 names 而不是列索引(即使用 for (colname in names(df1)){...而不是for (idx in seq_along(df1)){...)。您可以对名称和索引使用相同的 [[ 子集语法。