在apply循环中为多个数据集创建多平面图

时间:2014-10-06 22:37:33

标签: r plot lapply

阿罗哈!我是R的新手,目前经历了陡峭的学习曲线。如果我把所有的R语言弄错了,我道歉。

我有很多数据集,每个数据集都有6列数字数据。所以:

  • df1:第1列至第6列
  • df2:第1列至第6列
  • df3:第1列到第6列......等等

我可以使用以下代码在lapply()循环之外的一个PDF中创建多面板图:

pdf(file="plot1.pdf, width=8.5, height=11)
par(mfrow=c(3,3), oma=c(1,1,8,1))
plot(a ~ b, df1)
plot(a ~ b, df2)
plot(a ~ b, df3)
...
dev.off()

由于我有很多数据集要绘制并显示在同一个PDF中,我尝试使用lapply()循环,这样我就可以遍历数据集。在下面的例子中,假设我有9个数据集,因此我可以创建一个3行乘3列的单页面图。

Test <- lapply(1:length(files), function(x) {     # files = list of 9 file names
  a <- as.data.table(read.csv(files[x], header = TRUE))
  pdf(file="plot1.pdf, width=8.5, height=11)
  par(mfrow=c(3,3), oma=c(1,1,8,1))
  plot(col 1 ~ col 2, a)
  dev.off()
})

当我运行此代码时,我得到一个只有一个图的PDF。该图表属于文件列表中的最后一个数据集。我做错了什么?

1 个答案:

答案 0 :(得分:2)

您只需要在循环外移动设备开放(pdf()),配置(par())和关闭(dev.off())。此外,您可以直接循环文件,而无需创建data.table。还修复了公式语法。

pdf(file="plot1.pdf", width=8.5, height=11)
par(mfrow=c(3,3), oma=c(1,1,8,1))
Test <- lapply(files, function(x) {
  a <- read.csv(x, header = TRUE)
  plot(col1 ~ col2, a)
})
dev.off()