R:ベクトルがあり、100より大きい最初の値の位置を見つけたい。
# Randomly generate a suitable vector
set.seed(0)
v <- sample(50:150, size = 50, replace = TRUE)
min(which(v > 100))
which
およびmax
に基づくほとんどの回答は、entireベクトルを反復処理するため低速です(特に長いベクトルの場合)。 :
x>100
は、条件に一致するかどうかを確認するために、ベクトルのevery値を評価しますwhich
およびmax
/min
searchallステップ1で返されたインデックスを検索し、最大/最小Position
は、最初のTRUE値に遭遇するまで条件を評価し、残りのベクトルを継続せずに、対応するインデックスをすぐに返します。
# Randomly generate a suitable vector
v <- sample(50:150, size = 50, replace = TRUE)
Position(function(x) x > 100, v)
チェックアウト which.max
:
x <- seq(1, 150, 3)
which.max(x > 100)
# [1] 35
x[35]
# [1] 103
ちょうど言及するために、Hadley Wickhamは、関数プログラミングのためのpurrr
パッケージでこのタスクを正確に行うための関数detect_index
を実装しました。
私は最近detect_index
を自分で使用しましたが、同じ問題を抱えている他の人にもお勧めします。
detect_index
のドキュメントはここにあります: https://rdrr.io/cran/purrr/man/detect.html
多くの解決策がありますが、もう1つは次のとおりです。
x <- 90:110
which(x > 100)[1]