如何使用purrr包有条件地对列表进行子集化

时间:2017-05-31 03:46:45

标签: r list subset 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

并且只想选择包含10的元素。

期望的结果:

#> [[1]]
#> [1]  1  2  3  4  5  6  7  8  9 10

如何使用管道运算符和purrr包在行中简明扼要地完成此操作?

foll。代码有效,但感觉有点笨拙。

x %>% map_lgl(~contains(.,10L)) %>% subset(x,.)

是否有更好的方法只使用x和管道运算符一次?

3 个答案:

答案 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