2013-06-30 2 views
6

У меня есть куча упорядоченных векторов, содержащих число между 0 и 1. Я должен найти индекс первого элемента в течение определенного значения R:which.max() не возвращает NA

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

сейчас если моя цель значение превышает максимальное значение в векторе, which.max() возвращает 1, который можно спутать с «реальной» первой величины:

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

Как я могу изменить это выражение, чтобы получить NA в результате?

ответ

12

Просто используйте which() и возвращают первый элемент:

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

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

Чтобы понять, почему which.max() не работает, вы должны понять, как R принуждают свои значения из числовых логичнее числовых.

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

Спасибо вам за ответ и за объяснение! – ap53

Смежные вопросы