使用向量化函数过滤每个列表中的不同值

时间:2018-07-19 10:13:21

标签: r list vectorization

我有一个列表:

> list
[[1]]
 [1] 5 3 7 9 3 8 3 4 5 7

[[2]]
 [1] 2 8 7 8 7 9 6 3 1 4

[[3]]
 [1] 7 2 1 7 9 8 9 8 8 2

[[4]]
 [1]  5  2  2  1  8  8  2  1 10  7

现在,我有了要过滤的元素列表。

> filtering
[[1]]
 [1] 11 10 12

[[2]]
 [1] 7 3 9

[[3]]
 [1] 3 7 8

[[4]]
 [1] 2 6 9

我想不使用任何循环就过滤list[[1]]filtering[[1]]中的元素,然后过滤list[[2]]中的元素与filtering[[2]]中的元素,等等...

1 个答案:

答案 0 :(得分:4)

类似这样的东西(但是 mapply 仍然是一个循环):

# example data
mylist <- list(1:5, 11:15)
myfilter <- list(c(2,4), c(12, 13))


mapply(FUN = function(x, y){ x[ x %in% y] }, mylist, myfilter, SIMPLIFY = FALSE)
# [[1]]
# [1] 2 4
# 
# [[2]]
# [1] 12 13

或者按照 @akrun 的注释中的建议,使用 purrr 包:

library(purrr)

map2(mylist, myfilter, ~ .x[.x %in% .y])