当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R purrr keep 根据元素的值保留/丢弃元素


keep() 选择 .p 计算结果为 TRUE 的所有元素; discard() 选择 .p 计算结果为 FALSE 的所有元素。 compact() 丢弃 .p 计算结果为空向量的元素。

用法

keep(.x, .p, ...)

discard(.x, .p, ...)

compact(.x, .p = identity)

参数

.x

列表或向量。

.p

通过以下方式之一指定的谓词函数(即返回 TRUEFALSE 的函数):

  • 命名函数,例如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/keep.R

相关用法


注:本文由纯净天空筛选整理自Hadley Wickham等大神的英文原创作品 Keep/discard elements based on their values。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。