2016-12-30 66 views
1

我正在創建數據源的多個子集,然後以幾種不同的方式繪製圖表並輸出爲pdf。我創建了一個for循環來創建一切並操作數據,但是當我嘗試子集時,返回的數據集是空的。我創建了一個簡單的示例,顯示我在下面遇到的問題。列表清單上的篩選器數據表

有沒有另外一種方法我應該考慮這個問題?

id <- c(rep("a",20),rep("c",10),rep("d",10),rep("e",20),rep("f",20),rep("g",20)) 
x <- rnorm(n=100, mean=1323, sd=6.432) 
dt <- data.table(id, x) 

class1 <- c("a","e","g") 
class2 <- c("c","F") 
class3 <- c("b","d") 

classes <- list(class1,class2,class3) 

dtNames <- c("c1","c2","c3") 

#this doesn't work 
for(i in 1:length(classes)){ 
    assign(dtNames[i],dt[dt$id %in% classes[i],]) 
} 

#this does work 
assign(dtNames[1],dt[dt$id %in% class1]) 
+0

最好不要在全局環境中創建多個對象 – akrun

+0

最好是創建data.frames列表,而不是使用assign。查看@ gregor的帖子[這個問題](http://stackoverflow.com/questions/17499013/how-do-i-make-a-list-of-data-frames)瞭解如何創建和使用這些對象的提示。 – lmo

回答

1

我們需要使用[[提取list元素

for(i in seq_along(classes)){ 
    assign(dtNames[i], dt[id %chin% classes[[i]]]) 
} 

注意:最好不要創建在全球環境中的多個對象。

+1

我沒有在我的實際代碼中使用assign命令,我只是將過濾的數據集放入一個列表中,然後我將其從其他函數中運行。謝謝你的幫助! –