0

という名前のオブジェクトのリストがありますlistedresultそれぞれに異なるデータがあり、以前に作成した という 1 つのオブジェクトにマージしたいと考えています。すべてのデータをマージしたいループを作成しました。しかし、オブジェクトを関数内に入れたいときは機能しません

for (l in 1:length(listed)){
       result <- merge(result, listed[[l]], by.x="GOterm", by.y="GO.ID", all=TRUE) 
    }

内部のオブジェクトの代わりに使用した場合

記載されている[[l]]

データ

result <- merge(result, data, by.x="GOterm", by.y="GO.ID", all=TRUE) 

それはうまくいきます。

マージ機能に有効なオブジェクト名を挿入するにはどうすればよいですか?

4

1 に答える 1

0

エラー メッセージは、 の項目の一部に列listedがないことを示していGO.IDます。次のようにして、どれを見つけることができます:

which(!mapply(`%in%`, list("GO.ID"), lapply(listed, names)))

データを修正すると、forループが意図したとおりに機能するはずです。


次に例を示します。

listed <- list(data.frame(GO.ID  = 1:3, v2 = 4:6),
               data.frame(GO.ID  = 1:3, v2 = 4:6),
               data.frame(GO.id  = 1:3, v2 = 4:6))

which(!mapply(`%in%`, list("GO.ID"), lapply(listed, names)))
# [1] 3

編集:以下のコメントに続いて、listed変数名のリストが表示されますlisted <- list("data", "data2", "data3")。したがって、答えは次のようになります。

for (l in 1:length(listed)) {
    result <- merge(result, get(listed[[l]]), by.x="GOterm", by.y="GO.ID", all=TRUE) 
}

またはより良い:

for (df in mget(unlist(listed))) {
    result <- merge(result, df, by.x="GOterm", by.y="GO.ID", all=TRUE) 
}
于 2013-10-18T11:21:16.047 に答える