【发布时间】:2021-06-05 13:44:24
【问题描述】:
包purrr 定义了两个函数keep() 和discard(),它们根据谓词执行它们的名称。
我在此包中找不到基于谓词分隔列表/向量的函数。例如:
v <- 1:10
separate(v, function(x) x %% 2 == 0)
会返回:
list(no = c(1, 3, 5, 7, 9), yes = c(2, 4, 6, 8, 10))
我错过了什么吗?我认为这可能比调用将遍历整个列表的两个函数更有效。
编辑:我想用一个列表和一个更复杂的函数来应用于每个元素。所以我不确定是否可以使用split。
例如:
l1 <- list(list(1, 2, 3), list(4, 5), list(6))
purrr::discard(l1, ~ length(.) == 3)
【问题讨论】:
-
您可能正在寻找
split():split(v, v %% 2 == 0)。 -
dplyr 有
group_split;但是,它适用于数据框或列表。seq(10) %>% data.frame %>% group_split(even = . %% 2 == 0)
标签: r functional-programming purrr