2014-10-06 64 views
0

Aloha!我是R新手,目前正在经历一个陡峭的学习曲线。如果我弄错了所有R语言,我很抱歉。在应用循环中为多个数据集创建多平面图

我有许多数据集,每一个数字数据的6列。所以:

  • DF1:列1通6
  • DF2:列1通6
  • DF3:列1通6 ...等等

我能创造一个在一个PDF使用下面的代码的lapply()循环之外多面板情节:

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() 
}) 

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

回答

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() 
+0

太谢谢你了!它现在有效! – ccheng 2014-10-07 00:48:50