使用一个带有布尔值的列表来过滤另一个列表

Using one list with boolean to filter another list

我有 2 个列表:

>logical.list  
$mask1  
[1] TRUE FALSE TRUE  
$mask2  
[1] FALSE TRUE FALSE  
>work.list  
$vector1  
[1] "a" "b" "c"  
$vector2  
[1] "d" "e" "f"  

我想使用第一个 (logical.list) 作为掩码从 work.list 中提取下一个输出:

>output.list  
$vector1  
[1] "a" "c"  
$vector2  
[1] "e"  

是否有避免循环、lapply 等的优雅决策?

使用 Map.

提取
Map(`[`, work.list, logical.list)
# $vector1
# [1] "a" "c"
# 
# $vector2
# [1] "e"

数据:

logical.list) <- list(mask1 = c(TRUE, FALSE, TRUE), mask2 = c(FALSE, TRUE, FALSE
))
work.list <- list(vector1 = c("a", "b", "c"), vector2 = c("d", "e", "f"))