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 not, is there a R way to code it in a couple of lines?
intersect() function in R Language is used to find the intersection of two Objects. This function takes two objects like Vectors, dataframes, etc. as arguments and results in a third object with the common data of both the objects.
In R, we can do this by using intersection function along with Reduce function.
Intersection of two list means we need to take all those elements which are common to both of the initial lists and store them into another list.
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"
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With