2011-07-08 13 views
9

ホイールを再発見する前に:リストにxを受け取り、y[[i]] = intersect(x[[1]][[i]], x[[2]][[i]], ...)というようなリストyを返す関数がRにありますか?もしそうでなければ、2行でコード化するRアドリックな方法がありますか?Rのリストの交差

答えて

9

これは機能しますか?

x <- list(list(1:3,2:4),list(2:3,4:5),list(3:7,4:5)) 
maxlen <- max(sapply(x,length)) 
lapply(seq(maxlen),function(i) Reduce(intersect,lapply(x,"[[",i))) 

(追加のステップとしてReduceを使用する必要がありますのでintersectは2つのだけの引数を取ります)、私は任意のハードケースでこれを試していない

PS - 例えば不均一な長さのリスト。

+0

これはかなり良いとRの精神です。 – gappy

2

次のようにReduceが簡単に使用することができそうです。

> Reduce(intersect, list(v1 = c("a","b","c","d"), 
+       v2 = c("a","b","e"), 
+       v3 = c("a","f","g"))) 
[1] "a" 
関連する問題