6

我有一堆包含 0 到 1 之间数字的有序向量。我需要在某个值 r 上找到第一个元素的索引:

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 结果?

4

1 回答 1

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
于 2013-06-30T21:17:32.560 回答