2013-11-28 110 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