我有以下清单:
x <- list(1:5, 1:10)
x
#> [[1]]
#> [1] 1 2 3 4 5
#> [[2]]
#> [1] 1 2 3 4 5 6 7 8 9 10并且只选择包含10的元素。
预期结果:
#> [[1]]
#> [1] 1 2 3 4 5 6 7 8 9 10如何使用管道操作符和purrr包在单行中简洁地完成此操作?
福尔摩斯。代码工作,但感觉有点笨拙。
x %>% map_lgl(~contains(.,10L)) %>% subset(x,.)是否有更好的方法使用x和管道操作符各一次?
发布于 2017-05-31 03:57:32
您可以使用purrr::keep
library(purrr)
x <- list(1:5, 1:10)
x
#> [[1]]
#> [1] 1 2 3 4 5
#>
#> [[2]]
#> [1] 1 2 3 4 5 6 7 8 9 10
x %>% keep(~ 10 %in% .x)
#> [[1]]
#> [1] 1 2 3 4 5 6 7 8 9 10发布于 2017-05-31 03:51:53
x[sapply(x, function(x) any(x == 10))]发布于 2017-05-31 03:53:38
我们可以使用Filter
Filter(function(x) 10 %in% x, x)
#[[1]]
#[1] 1 2 3 4 5 6 7 8 9 10或使用purrr
x %>%
purrr::map_lgl(~10 %in% .) %>%
x[.]我们可以让它成为一种功能
filterL <- function(lst, val){
lst %>%
purrr::map_lgl(~val %in% .) %>%
lst[.]
}
filterL(x, 10)
#[[1]]
# [1] 1 2 3 4 5 6 7 8 9 10https://stackoverflow.com/questions/44275273
复制相似问题