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


R purrr detect 查找第一個匹配的值或位置


查找第一個匹配的值或位置

用法

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 + 1function(x) x + 1

  • 一個公式,例如~ .x + 1 。您必須使用.x 來引用第一個參數。僅當您需要向後兼容舊版本的 R 時才推薦。

  • 字符串、整數或列表,例如"idx"1list("idx", 1) 分別是 \(x) pluck(x, "idx")\(x) pluck(x, 1)\(x) pluck(x, "idx", 1) 的簡寫。如果索引元素為 NULL 或不存在,則可以選擇提供 .default 以設置默認值。

...

傳遞給 .p 的其他參數。

.dir

如果 "forward" (默認值)從向量的開頭開始並向結尾移動;如果 "backward" ,則從向量的末尾開始並向開頭移動。

.right

[Deprecated]請用.dir反而。

.default

未檢測到任何內容時返回的值。

detect第一個與謂詞匹配的項的值; detect_index匹配項的位置。如果未找到,detect 返回NULLdetect_index

返回 0。

也可以看看

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/detect.R

相關用法


注:本文由純淨天空篩選整理自Hadley Wickham等大神的英文原創作品 Find the value or position of the first match。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。