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