Intersection of lists in R

后端 未结 2 1864
夕颜
夕颜 2021-02-13 03:09

Is there a function that receives a list x and returns a list y such that y[[i]] = intersect(x[[1]][[i]], x[[2]][[i]], ...) ?

If n

相关标签:
2条回答
  • 2021-02-13 03:22

    It seems the Reduce can be simply used as follows:

    > Reduce(intersect,  list(v1 = c("a","b","c","d"), 
    +                         v2 = c("a","b","e"), 
    +                         v3 = c("a","f","g"))) 
    [1] "a"
    
    0 讨论(0)
  • 2021-02-13 03:36

    Does this work?

    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 only takes two arguments so you have to use Reduce as an additional step)

    PS I haven't tried this on any hard cases -- e.g. lists of uneven length.

    0 讨论(0)
提交回复
热议问题