首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用purrr包有条件地子集列表

如何使用purrr包有条件地子集列表
EN

Stack Overflow用户
提问于 2017-05-31 03:46:45
回答 3查看 924关注 0票数 5

我有以下清单:

代码语言:javascript
复制
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的元素。

预期结果:

代码语言:javascript
复制
#> [[1]]
#> [1]  1  2  3  4  5  6  7  8  9 10

如何使用管道操作符和purrr包在单行中简洁地完成此操作?

福尔摩斯。代码工作,但感觉有点笨拙。

代码语言:javascript
复制
x %>% map_lgl(~contains(.,10L)) %>% subset(x,.)

是否有更好的方法使用x和管道操作符各一次?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-05-31 03:57:32

您可以使用purrr::keep

代码语言:javascript
复制
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
票数 12
EN

Stack Overflow用户

发布于 2017-05-31 03:51:53

代码语言:javascript
复制
x[sapply(x, function(x) any(x == 10))]
票数 2
EN

Stack Overflow用户

发布于 2017-05-31 03:53:38

我们可以使用Filter

代码语言:javascript
复制
Filter(function(x) 10 %in% x, x)
#[[1]]
#[1]  1  2  3  4  5  6  7  8  9 10

或使用purrr

代码语言:javascript
复制
x %>%
    purrr::map_lgl(~10 %in% .)  %>%
    x[.]

我们可以让它成为一种功能

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44275273

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档