查找第一個匹配的值或位置
用法
detect(
.x,
.f,
...,
.dir = c("forward", "backward"),
.right = NULL,
.default = NULL
)
detect_index(.x, .f, ..., .dir = c("forward", "backward"), .right = NULL)
參數
- .x
-
列表或向量。
- .f
-
一個函數,通過以下方式之一指定:
-
命名函數,例如
mean
。 -
匿名函數,例如
\(x) x + 1
或function(x) x + 1
。 -
一個公式,例如
~ .x + 1
。您必須使用.x
來引用第一個參數。僅當您需要向後兼容舊版本的 R 時才推薦。 -
字符串、整數或列表,例如
"idx"
、1
或list("idx", 1)
分別是\(x) pluck(x, "idx")
、\(x) pluck(x, 1)
和\(x) pluck(x, "idx", 1)
的簡寫。如果索引元素為NULL
或不存在,則可以選擇提供.default
以設置默認值。
-
- ...
-
傳遞給
.p
的其他參數。 - .dir
-
如果
"forward"
(默認值)從向量的開頭開始並向結尾移動;如果"backward"
,則從向量的末尾開始並向開頭移動。 - .right
- .default
-
未檢測到任何內容時返回的值。
也可以看看
keep()
用於保留所有匹配值。
例子
is_even <- function(x) x %% 2 == 0
3:10 |> detect(is_even)
#> [1] 4
3:10 |> detect_index(is_even)
#> [1] 2
3:10 |> detect(is_even, .dir = "backward")
#> [1] 10
3:10 |> detect_index(is_even, .dir = "backward")
#> [1] 8
# Since `.f` is passed to as_mapper(), you can supply a
# lambda-formula or a pluck object:
x <- list(
list(1, foo = FALSE),
list(2, foo = TRUE),
list(3, foo = TRUE)
)
detect(x, "foo")
#> [[1]]
#> [1] 2
#>
#> $foo
#> [1] TRUE
#>
detect_index(x, "foo")
#> [1] 2
# If you need to find all values, use keep():
keep(x, "foo")
#> [[1]]
#> [[1]][[1]]
#> [1] 2
#>
#> [[1]]$foo
#> [1] TRUE
#>
#>
#> [[2]]
#> [[2]][[1]]
#> [1] 3
#>
#> [[2]]$foo
#> [1] TRUE
#>
#>
# If you need to find all positions, use map_lgl():
which(map_lgl(x, "foo"))
#> [1] 2 3
相關用法
- 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 keep_at 根據元素的名稱/位置保留/丟棄元素
- R purrr keep 根據元素的值保留/丟棄元素
- R purrr transpose 轉置列表。
- R purrr flatten 將列表的列表展平為簡單的向量
- R purrr every 列表中的每個元素、部分元素還是沒有一個元素滿足謂詞?
注:本文由純淨天空篩選整理自Hadley Wickham等大神的英文原創作品 Find the value or position of the first match。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。