max(x,na.rm = TRUE)无论如何都返回“NA”

时间:2018-02-13 16:29:12

标签: r max

我有两个向量val_hps和e:

val_hp1 <- -1
val_hp2 <- -1
val_hp3 <- +1
val_hp4 <- -1
val_hps <- c(val_hp1, val_hp2, val_hp3, val_hp4)
e <- c(-.1, -.02, +.03, 0)

我想从矢量e的元素集中选择最大值,使得:

  1. 该集合仅包含与向量val_hps中的负元素具有相同位置的值;
  2. 该集合不包含数字值为0的元素。
  3. 这就是我的工作方式:

    e[e == 0] <- NA
    e[max(which(val_hps < 0), na.rm = TRUE)]
    

    这应该返回-.02,但它实际上返回NA。 我有什么误解?谢谢!

    PS。用min()函数替换max()函数就像魅力一样 +其他地方有一个类似的问题: “mean(,na.rm = TRUE)仍然返回NA”,但不幸的是它并没有解决我的问题..

1 个答案:

答案 0 :(得分:3)

一切都按预期工作,但您的代码中有错误。在你的最后一行,你做

e[max(which(val_hps < 0), na.rm = TRUE)]

which(val_hps < 0)返回1 2 4,然后最大值为4。因此,您将获得e[4]的值,这在一个不幸的巧合(或幸运)恰好恰好是您设置为NA的元素。这种巧合就是min看起来有效,而max没有。

正确的是

e[max(which(e < 0), na.rm = TRUE)]

这会忽略NA中的e,并根据需要返回e[2]