keep()
选择 .p
计算结果为 TRUE
的所有元素; discard()
选择 .p
计算结果为 FALSE
的所有元素。 compact()
丢弃 .p
计算结果为空向量的元素。
参数
- .x
-
列表或向量。
- .p
-
通过以下方式之一指定的谓词函数(即返回
TRUE
或FALSE
的函数):-
命名函数,例如
is.character
。 -
匿名函数,例如
\(x) all(x < 0)
或function(x) all(x < 0)
。 -
一个公式,例如
~ all(.x < 0)
。您必须使用.x
来引用第一个参数)。仅当您需要向后兼容旧版本的 R 时才推荐。
-
- ...
-
传递给
.p
的其他参数。
细节
在其他语言中, keep()
和 discard()
通常称为 select()
/filter()
和 reject()
/drop()
,但这些名称已在 R 中使用。 keep()
与 Filter()
类似,但是参数顺序更方便,谓词函数.p
的评估更严格。
也可以看看
keep_at()
/discard_at()
按名称保留/丢弃元素。
例子
rep(10, 10) |>
map(sample, 5) |>
keep(function(x) mean(x) > 6)
#> [[1]]
#> [1] 6 7 9 5 8
#>
#> [[2]]
#> [1] 9 8 5 2 7
#>
# Or use a formula
rep(10, 10) |>
map(sample, 5) |>
keep(\(x) mean(x) > 6)
#> [[1]]
#> [1] 10 9 6 4 7
#>
#> [[2]]
#> [1] 8 2 7 5 10
#>
# Using a string instead of a function will select all list elements
# where that subelement is TRUE
x <- rerun(5, a = rbernoulli(1), b = sample(10))
#> Warning: `rerun()` was deprecated in purrr 1.0.0.
#> ℹ Please use `map()` instead.
#> # Previously
#> rerun(5, a = rbernoulli(1), b = sample(10))
#>
#> # Now
#> map(1:5, ~ list(a = rbernoulli(1), b = sample(10)))
#> Warning: `rbernoulli()` was deprecated in purrr 1.0.0.
x
#> [[1]]
#> [[1]]$a
#> [1] TRUE
#>
#> [[1]]$b
#> [1] 2 9 5 6 1 8 7 4 3 10
#>
#>
#> [[2]]
#> [[2]]$a
#> [1] FALSE
#>
#> [[2]]$b
#> [1] 2 10 3 5 4 8 7 6 9 1
#>
#>
#> [[3]]
#> [[3]]$a
#> [1] TRUE
#>
#> [[3]]$b
#> [1] 2 9 1 5 4 6 3 8 7 10
#>
#>
#> [[4]]
#> [[4]]$a
#> [1] FALSE
#>
#> [[4]]$b
#> [1] 9 3 6 2 1 7 5 8 10 4
#>
#>
#> [[5]]
#> [[5]]$a
#> [1] TRUE
#>
#> [[5]]$b
#> [1] 3 5 2 8 6 1 7 10 4 9
#>
#>
x |> keep("a")
#> [[1]]
#> [[1]]$a
#> [1] TRUE
#>
#> [[1]]$b
#> [1] 2 9 5 6 1 8 7 4 3 10
#>
#>
#> [[2]]
#> [[2]]$a
#> [1] TRUE
#>
#> [[2]]$b
#> [1] 2 9 1 5 4 6 3 8 7 10
#>
#>
#> [[3]]
#> [[3]]$a
#> [1] TRUE
#>
#> [[3]]$b
#> [1] 3 5 2 8 6 1 7 10 4 9
#>
#>
x |> discard("a")
#> [[1]]
#> [[1]]$a
#> [1] FALSE
#>
#> [[1]]$b
#> [1] 2 10 3 5 4 8 7 6 9 1
#>
#>
#> [[2]]
#> [[2]]$a
#> [1] FALSE
#>
#> [[2]]$b
#> [1] 9 3 6 2 1 7 5 8 10 4
#>
#>
# compact() discards elements that are NULL or that have length zero
list(a = "a", b = NULL, c = integer(0), d = NA, e = list()) |>
compact()
#> $a
#> [1] "a"
#>
#> $d
#> [1] NA
#>
相关用法
- R purrr keep_at 根据元素的名称/位置保留/丢弃元素
- R purrr accumulate 累积向量缩减的中间结果
- R purrr imap 将函数应用于向量的每个元素及其索引
- R purrr list_transpose 转置列表
- R purrr as_vector 将列表强制转换为向量
- R purrr map_if 有条件地将函数应用于向量的每个元素
- R purrr map2 映射两个输入
- R purrr array-coercion 强制数组列出
- R purrr auto_browse 包装一个函数,以便在出错时自动 browser()
- R purrr pluck 安全地获取或设置嵌套数据结构深处的元素
- R purrr insistently 将函数转换为等待,然后在错误后重试
- R purrr map_depth 在给定深度映射/修改元素
- R purrr list_simplify 将列表简化为原子或 S3 向量
- R purrr rerun 多次重新运行表达式
- R purrr quietly 包装一个函数来捕获副作用
- R purrr list_flatten 压平列表
- R purrr pmap 同时映射多个输入(“并行”)
- R purrr possibly 包装函数以返回值而不是错误
- R purrr head_while 查找全部满足谓词的头/尾。
- R purrr rbernoulli 从伯努利分布生成随机样本
- R purrr rate-helpers 创建延迟率设置
- R purrr transpose 转置列表。
- R purrr flatten 将列表的列表展平为简单的向量
- R purrr every 列表中的每个元素、部分元素还是没有一个元素满足谓词?
- R purrr detect 查找第一个匹配的值或位置
注:本文由纯净天空筛选整理自Hadley Wickham等大神的英文原创作品 Keep/discard elements based on their values。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。