max(x, na.rm = TRUE) 无论如何都会返回 "NA"。

3

我有两个向量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)]

这应该返回-0.02,但实际上返回NA。 我误解了什么?谢谢!
PS。使用min()函数代替max()函数可以完美解决问题。 此外,还有一个类似的问题:“mean( ,na.rm=TRUE)仍然返回NA”,但不幸的是它并没有解决我的问题。

用NA覆盖数据似乎不是一个好主意。你可以使用max(e[e != 0 & val_hps < 0]) - Frank
Frank:你做得很好,谢谢! - cea
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)]

这会忽略e中的NA,并返回你想要的e[2]

giusti:Frank的回答解决了我的问题,谢谢! - cea

0

这正是我所期望的:

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

@giusti和@Frank:谢谢!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接