In R: Ich habe einen Vektor und möchte die Position des ersten Werts ermitteln, die größer als 100 ist.
# Randomly generate a suitable vector
set.seed(0)
v <- sample(50:150, size = 50, replace = TRUE)
min(which(v > 100))
Die meisten auf which
und max
basierenden Antworten sind langsam (insbesondere bei langen Vektoren), da sie den gesamten Vektor durchlaufen :
x>100
wertet jeden Wert im Vektor aus, um festzustellen, ob er der Bedingung entsprichtwhich
und max
/min
durchsuchen alle in Schritt 1 zurückgegebenen Indizes und finden die Maximum MinimumPosition
wertet die Bedingung nur aus, bis sie auf den ersten TRUE-Wert trifft, und gibt den entsprechenden Index sofort zurück, ohne den Rest des Vektors zu durchlaufen.
# Randomly generate a suitable vector
v <- sample(50:150, size = 50, replace = TRUE)
Position(function(x) x > 100, v)
Check out which.max
:
x <- seq(1, 150, 3)
which.max(x > 100)
# [1] 35
x[35]
# [1] 103
Um nur zu erwähnen, Hadley Wickham hat eine Funktion, detect_index
, implementiert, um genau diese Aufgabe in seinem Paket purrr
für die funktionale Programmierung auszuführen.
Ich habe kürzlich detect_index
selbst verwendet und würde es jedem anderen empfehlen, der das gleiche Problem hat.
Dokumentation für detect_index
finden Sie hier: https://rdrr.io/cran/purrr/man/detect.html
Es gibt viele Lösungen, eine andere ist:
x <- 90:110
which(x > 100)[1]