2013-06-30 19 views
6

Ho un sacco di vettori ordinati contenenti numeri compresi tra 0 e 1. ho bisogno di trovare l'indice del primo elemento oltre un certo valore r:which.max() non restituisce NA

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

Ora se il mio valore di riferimento è il valore massimo nel vettore, which.max() restituisce 1, che può essere confuso con il "vero" primo valore:

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

Come potrei modificare questa espressione per ottenere un NA come risultato?

risposta

12

Basta usare which() e restituire il primo elemento:

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

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

Per comprendere il motivo per cui which.max() non funziona, è necessario capire come R costringe i vostri valori da numerico logico numerico.

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

Grazie ad entrambi per la risposta e per la spiegazione! – ap53