當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。