2013-11-28 109 views
2

我想遍歷數字數據框的列表,並使用for循環爲每個數據框的特定列創建圖。我有一個工作代碼,但結果很奇怪。我期望只創建兩個圖,但R創建四個,我可以簡單地理解爲什麼,尤其是因爲當我使用print而不是plot時,他正在打印我期望的值。下面是一個很大的數據集的小例子。任何想法都非常感謝。非常感謝!R:遍歷數據框列表並創建有約束的列圖

# Create data 
a <- c(1,2,3,4,5) 
b <- c(6,7,8,9,10) 
c <- c(0,0,0,1,0) 

d <- c(1,2,3,4,5,6,7,8,9,10) 
e <- c(11,12,13,14,15,16,17,18,19,20) 
f <- c(0,0,0,0,0,0,0,1,0,0) 

# Create data frames 
df1 <- data.frame(cbind(a,b,c)) 
df2 <- data.frame(cbind(d,e,f)) 
names(df2) <- c("a","b","c") 

# Create list of data frames 
l <- list(df1,df2) 

# Create titles for plots 
titlenames <- c("Graph 1","Graph 2") 

# Loop over list of data frames and create plots 
for (i in l){ for(j in titlenames) { 
    plot(x=(i$a[i$c==0]),y=(i$b[i$c==0]),main="",xlab="",ylab="") 
    title(main=paste(j)) 
}} 
+3

'for(i in l){for(j in titlenames)...'2 x 2 = 4 –

+0

哇,現在我明白了。非常感謝! – Triamus

回答

5

你應該這樣做嗎? -

# Loop over list of data frames and create plots 
for (i in seq(titlenames)) { 
    plot(x=(l[[i]]$a[l[[i]]$c==0]),y=(l[[i]]$b[l[[i]]$c==0]),main="",xlab="",ylab="") 
    title(main=titlenames[i]) 
} 

我張貼爲答案,評論將是醜陋的,難以閱讀。基本上,我已經刪除了j循環,並且正在使用1跟蹤所有內容,現在循環顯示1:n,而不是l

+0

我明白這個問題。雖然你的解決方案是正確的,但我認爲它現在循環通過titlenames,這是一個獨立於數據框列表的向量。仍然以你的榜樣和斯蒂芬亨德森的評論,我可以重建它。非常感謝! – Triamus

+0

沒有這樣的事情,或者你的上面的代碼將工作,如果你的列表中的data.frames有不同的列名稱egabc&def –

+0

是的,實際上對於我使用索引工作的大數據集,但我覺得它更容易處理名稱這個例子。謝謝! – Triamus