我有以下列表:
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包在单行中简明扼要地完成此操作?
foll。代码有效,但感觉有点笨拙。
x %>% map_lgl(~contains(.,10L)) %>% subset(x,.)
是否有更好的方法只使用x
和管道运算符一次?
答案 0 :(得分:8)
您可以使用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
答案 1 :(得分:2)
data = sc.textFile("data/text_data.csv")
答案 2 :(得分:1)
我们可以使用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 10