【问题标题】:max(x, na.rm = TRUE) returns "NA" anywaymax(x, na.rm = TRUE) 无论如何都会返回“NA”
【发布时间】:2018-03-03 16:20:48
【问题描述】:

我有两个向量 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 的元素。

我是这样进行的:

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

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

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

【问题讨论】:

  • 用 NA 覆盖数据似乎是个坏主意。你可以做max(e[e != 0 &amp; val_hps &lt; 0])
  • 弗兰克:你成功了,谢谢!

标签: r max


【解决方案1】:

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

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

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

正确的是

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

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

【讨论】:

  • giusti:Frank 的回答解决了我的问题,谢谢!
【解决方案2】:

这完全符合我的预期:

max(e[e != 0 & val_hps < 0])

@giusti 和@Frank:谢谢!

【讨论】:

    猜你喜欢
    • 2014-10-07
    • 2016-04-15
    • 2019-01-01
    • 2013-01-11
    • 2016-07-31
    • 1970-01-01
    • 1970-01-01
    • 2011-12-23
    • 1970-01-01
    相关资源
    最近更新 更多