2013-06-30 29 views
6

tôi có một loạt các vectơ đặt hàng có chứa số giữa 0 và 1. Tôi cần phải tìm ra chỉ số của phần tử đầu tiên trên một giá trị nhất định r:which.max() không trả lại NA

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

Bây giờ nếu giá trị mục tiêu của tôi là so với giá trị lớn nhất trong vector, which.max() trả về 1, mà thể bị nhầm lẫn với "thực" giá trị đầu tiên:

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

Làm thế nào tôi có thể sửa đổi biểu thức này để có được một NA là kết quả?

Trả lời

12

Chỉ cần sử dụng which() và trở về phần tử đầu tiên:

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

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

Để hiểu tại sao which.max() không làm việc, bạn phải hiểu cách R coerces giá trị của bạn từ số để logic số.

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

Cảm ơn cả câu trả lời và giải thích! – ap53

Các vấn đề liên quan