Пересечение списков в R - PullRequest
14 голосов
/ 09 июля 2011

Есть ли функция, которая получает список x и возвращает список y такой, что y[[i]] = intersect(x[[1]][[i]], x[[2]][[i]], ...)?

Если нет, есть ли способ R закодировать его в пару строк?

Ответы [ 2 ]

11 голосов
/ 09 июля 2011

Это работает?

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)))

(intersect принимает только два аргумента, поэтому вы должны использовать Reduce в качестве дополнительного шага)

PS Я не пробовал этов любых тяжелых случаях - например, списки неравной длины.

9 голосов
/ 20 декабря 2016

Кажется, Reduce можно просто использовать следующим образом:

> Reduce(intersect,  list(v1 = c("a","b","c","d"), 
+                         v2 = c("a","b","e"), 
+                         v3 = c("a","f","g"))) 
[1] "a"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...