如何将包含逻辑向量列表和字符向量列表的数据框管道到purrr::map2()
,以使用逻辑向量对字符向量进行子集化?
我的努力没有管道,但我不知道怎么用管道来做:
例如,使用此数据框:
a_pair = tibble(mask = list(TRUE, c(FALSE, TRUE), TRUE, TRUE,
c(FALSE, FALSE, FALSE, TRUE), TRUE, TRUE, TRUE,
TRUE, c(FALSE, FALSE, FALSE, TRUE)),
strings = list(".", c("0.29966", "0.31145"), "0.48243",
"0.55122",
c("0.10099", "0.10142", "0.49873", "0.56246"),
"0.56246", "0.10127", "0.70687", "0.68338",
c("0.03365", "0.16895", "0.68338", "0.82954")))
这有效:
library(purrr)
map2(a_pair$mask, a_pair$strings, function(logical, string) subset(string, logical))
但是这(如a related question中所述)并不是:
a_pair %>% map2(., names(.), ~{subset(.y, .x)})
Error in subset.default(.y, .x) : 'subset' must be logical
我是否需要进行某种不列名,或者以不同的方式引用逻辑向量?
答案 0 :(得分:2)
你应该使用
library(dplyr)
a_pair %>% {map2(.$strings, .$mask, subset)}
使用{}
有助于防止数据自动作为第一个参数传递。
或者,如果您包含magrittr
库,则可以执行
library(magrittr)
a_pair %$% map2(strings, mask, subset)