2016-04-27 5 views
1

私は2つのリストを持っています。次のように一つのリストは、インデックスを提供する:Rは2つの要素を賢明にリストします

dd[1:3] 
[[1]] 
[1] 2 5 6 7 9 14 16 

[[2]] 
[1] 5 

[[3]] 
integer(0) 

第二のリストのように文字列を含む:

ee[1:3] 
[[1]] 
[1] "HP"  "A" "HP"  "HP"  
[5] "BD" "A" "A" "NY" 
[9] "U"   "HP"  "HP"  "HP"  
[13] "HP"  "S"  "HP"  ""  
[17] "0"    

[[2]] 
[1] "HP" "HP" "HP" "HP" "T" 
[6] "HP" "HP" "0"   

[[3]] 
[1] "HP" "HP" "0" 

Iはeeの対応する要素にリストDDからインデックスを適用する、例えばee[[1]][1]から2,5,6,7,9,14,16要素を選択し、固有要素の長さを計算します。私はリストが巨大なのでベクトル化された方法でそれをしたい。

私はこれがmapplyの単純なアプリケーションであることを知っています。それは明らかなものがありません。どんな助けでも大歓迎です。ありがとう!

データ

dd <- list(c(2, 5, 6, 7, 9, 14, 16), 5, integer(0)) 
ee <- list(c("HP", "A", "HP", "HP", "BD", "A", "A", "NY", "U", "HP", 
      "HP", "HP", "HP", "S", "HP", "", "0"), 
      c("HP", "HP", "HP", "HP", "T", "HP", "HP", "0"), c("HP", "HP", "0")) 
+0

ありがとう! '地図'について知らなかった。実際には、得られた 'unique '要素の' length'も計算したいと思っています。今、 'Map'で得られた出力に対して' length'と 'unique'を別々に' lapply'することができますが、 'Map'と一緒にそれを行う方が早いでしょうか? –

+1

あなたの質問に言及する必要があります – rawr

+0

質問が更新されました。 –

答えて

2

あなたはmapply使用して、この方法でこれを行うことができます。

mapply(function(x,y){ 
    table(x[y]) 
    },ee,dd) 
+1

ありがとう!うまくいく –

1

別のオプションは、他の指標に基づいてlapply、サブセットを使用して1 listのシーケンスをループにあります要素の頻度を取得する

lapply(seq_along(ee), function(i) table(ee[[i]][dd[[i]]])) 
関連する問題