R言語で、リストまたはベクトルから最初に一致する値を検索して位置を取得する方法について解説します。ここではtidyverseパッケージに含まれているpurrrパッケージのdetect_index()を使用した方法についてお伝えします。

detect_index()の概要

detect_index()は、リストまたはベクトルから最初に一致する値を検索して位置を取得するための関数です。

detect_index()の使い方

purrr::detect_index()の使い方は次になります。


detect_index(.x, .f, ..., .dir = c("forward", "backward"), .right = NULL)

detect_index()の引数の意味

.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 = c(“forward”, “backward”)

デフォルトの「forward」の場合、ベクトルの先頭から始まり、末尾に向かって移動します。「backward」の場合、ベクトルの末尾から始まり、先頭に向かって移動します。

.right = NULL

非推奨。代わりに.dirを使用してください。

準備

あらかじめ、tidyverseパッケージを読み込んでおきます。


library(tidyverse)

リストから最初に一致する値を検索して位置を取得する

リストxから文字列ベクトルとして最初に一致する値を検索して位置を取得するには次のようにします。


x <- list(
    x1 = 1:3,
    x2 = letters[1:5]
  )
detect_index(x, ~ is.character(.x))

[1] 2

ベクトルから最初に一致する値を検索して位置を取得する

ベクトルyから5に最初に一致する値を検索して位置を取得するには次のようにします。


y <- 4:10
detect_index(y, \(x) x == 5)

[1] 2
R×purrr::detect_index リストまたはベクトルから最初に一致する値を検索して位置を取得する