使用map2()

时间:2017-09-15 18:40:35

标签: r purrr

如何将包含逻辑向量列表和字符向量列表的数据框管道到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

我是否需要进行某种不列名,或者以不同的方式引用逻辑向量?

1 个答案:

答案 0 :(得分:2)

你应该使用

library(dplyr)
a_pair %>% {map2(.$strings, .$mask, subset)}

使用{}有助于防止数据自动作为第一个参数传递。

或者,如果您包含magrittr库,则可以执行

library(magrittr)
a_pair %$% map2(strings, mask, subset)