2013-06-30 15 views
6

mam kilka uszeregowanych wektorów o numerach od 0 do 1. trzeba znaleźć indeks pierwszego elementu w stosunku do określonej wartości R:which.max() nie zwraca NA

x <- c(0.1, 0.3, 0.4, 0.8) 
which.max(x >= 0.4) 
[1] 3 # This is exactly what I need 

teraz jeśli wartość docelowa wynosi ponad maksymalnej wartości w wektorze, which.max() zwraca 1, który można mylić z „prawdziwego” pierwszej wartości:

which.max(x >= 0) 
[1] 1 
which.max(x >= 0.9) # Why? 
[1] 1 

Jak mogę zmodyfikować wyrażenie, aby uzyskać NA w rezultacie?

Odpowiedz

12

Wystarczy użyć which() i powrócić do pierwszego elementu:

which(x > 0.3)[1] 
[1] 3 

which(x > 0.9)[1] 
[1] NA 

Aby zrozumieć dlaczego which.max() nie działa, trzeba zrozumieć, jak R wymusza swoje wartości z numerycznej logiczne numeryczny.

x > 0.9 
[1] FALSE FALSE FALSE FALSE 

as.numeric(x > 0.9) 
[1] 0 0 0 0 

max(as.numeric(x > 0.9)) 
[1] 0 

which.max(as.numeric(x > 0.9)) 
[1] 1 
+0

Dziękuję zarówno za odpowiedź, jak i za wyjaśnienie! – ap53

Powiązane problemy