1

行位置を持つベクトル v があります。

v<-c(10,3,100,50,...)

これらの位置で、リストの要素を抽出し、列を固定します。たとえば、列番号が 2 であると仮定して、次のようにします。

data<-c()
data<-c(list1[[v]][[2]])

list1 には、次の形式のデータがあります。

[[34]]
      [1] "200_s_at" "483"        "1933"        "3664"        

たとえば、行 342 から値 1910 のみ、列 2 を抽出し、次の行で同じことを行いたいとします。

それをしたいのですが、エラーが発生しました。直接行うことは可能ですか?または、v の位置を 1 つずつ読み取り、次のようにデータ ベクトルを埋めるループが必要です。

#algorithm
for i<-1 to length(v)
    pos<-v[i]
    data[[i]]<-c(list1[[pos]][[2]])
next i

ありがとう

4

1 に答える 1

7

sapply以下のように使用できます。

sapply(list1[v], `[`, 2)

ただし、 「vapply」は「sapply」よりも安全な理由で説明されているように、データによっては予期しない出力が得られる場合があります。. たとえば、リスト アイテムの一部の長さが 2 未満の場合はどうなるでしょうか。リスト項目の一部がベクトルではなく data.frame である場合はどうなりますか? また、出力クラスは、リスト要素のクラス (論理、整数、数値、文字) によって異なる場合があります。たとえば、すべてのリスト項目が長さ >= 2 の文字ベクトルであると予想される場合は、次のようにする方が安全です。

vapply(list1[v], `[`, character(1), 2)

どこでvapplyあなたの仮定を再確認し、問題が見つかった場合はエラーになります。

于 2012-10-14T21:41:32.160 に答える