2014-10-06 58 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