2017-06-02 12 views
0

おもちゃの例として、list.mapがあり、その主索引に2つの要素のベクトルの「ポインタ」である副索引が含まれているとします。 testリストには、すべてのメインインデックスの "ポインタ"インデックスだけが含まれているので、対応するベクトルを出力する最終リストが必要です。Rの2つのリストのマッピングR

list1=list(c(1,2),c(3,4),c(5,6)) 
list.map=list(list1,list1) 
test=list(c(1,3),2) 

> list.map 
[[1]] 
[[1]][[1]] 
[1] 1 2 

[[1]][[2]] 
[1] 3 4 

[[1]][[3]] 
[1] 5 6 


[[2]] 
[[2]][[1]] 
[1] 1 2 

[[2]][[2]] 
[1] 3 4 

[[2]][[3]] 
[1] 5 6 

> test 
[[1]] 
[1] 1 3 

[[2]] 
[1] 2 

私の試み

test.out=NULL 
for(b in c(1,2)){ 
    test.out[[b]]=as.vector(sapply(test[[b]],function(x) list.map[[b]][[x]])) 
} 

> test.out 
[[1]] 
[1] 1 2 5 6 

[[2]] 
[1] 3 4 

これが最もエレガントなアプローチではありませんし、理想的に私は私のforループでbでインデックス化メインインデックスの数百を持っていると思います。これを書くには良い方法がありますか?

答えて

2
Map(function(x, y) unlist(x[y]), list.map, test) 

[[1]] 
[1] 1 2 5 6 

[[2]] 
[1] 3 4 
1

tidyverse構文は次のようになり

library(tidyverse) 
map2(list.map, test, `[`) %>% 
        map(unlist) 
#[[1]] 
#[1] 1 2 5 6 

#[[2]] 
#[1] 3 4 
関連する問題