2016-12-30 8 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

assignを使用するのではなく、data.framesのリストを作成する方が良いです。このようなオブジェクトの作成と操作に関するヒントについては、[この質問](@stackoverflow.com/questions/17499013/how-do-i-make-a-list-of-data-frames)の@ gregorの投稿を参照してください。 – lmo

答えて

1

我々はlist要素

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

NOTEを抽出するために[[を使用する必要があります。地球環境に複数のオブジェクトを作成しない方がよいです。

+1

私は実際のコードでassignコマンドを使用していません。フィルタリングされたデータセットをリストに投げてから、他の関数を実行するようにします。ご協力いただきありがとうございます! –

関連する問題