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

问题描述 投票:2回答:2

我有两个向量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。我有什么误解?谢谢!

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

r max
2个回答
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]


0
投票

这完全符合我的预期:

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

@giusti和@Frank:谢谢!

© www.soinside.com 2019 - 2024. All rights reserved.