我有一个列表:
> 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]]
中的元素,等等... >
答案 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])