【发布时间】:2014-11-12 17:34:46
【问题描述】:
我有一个简单的问题,但我无法掌握克服它的逻辑。
我有带有 NA 的数值向量,并希望对它们应用条件相关操作。
一个与我的问题类似的简单例子是:
x <- c(1,3,5,7,NA,2,4,6)
x[x>=5] <- c(1:8)[x>=5]
x[x<5] <- (c(1:8)*10)[x<5]
它返回错误“NAs are not allowed in subscripted assignments”,所以我想知道什么是明智的解决方案,因为单独运行每个属性都可以按预期工作。
我希望得到以下结果:
[1] 10 20 3 4 NA 60 70 8
最好不必创建一个 for 循环,因为此操作已经在一个用于空建模的函数中,并且需要很长时间的大量迭代。
提前谢谢你, 莱昂纳多
注意。 NAs 表示不可用的值
【问题讨论】:
-
这很有趣。似乎您不能将整数与
NA结合起来,而仅当您在 RHS 上有多个值时才进行子集和分配......即x[c(NA, 1)] <- 100和x[NA] <- 100都可以工作,而x[c(NA, 1)] <- 100:101或x[NA] <- 100:101不会 -
这是一个有价值的问题,因为它会收到该错误消息。但重要的是要注意,即使您的代码在没有 NA 导致的错误的情况下运行,也不会产生预期的结果。代码的第 2 行将覆盖用于预测上述 3 和 4 的结果的 5 和 7 的原始值(而不是 30 和 40),并且在调用第 3 行时它们将是 3 和 4,导致他们变成 30 和 40。试试:
x[x>=5 & !is.na(x)] <- c(1:8)[x>=5 & !is.na(x)] ; x[x<5 & !is.na(x)] <- (c(1:8)*10)[x<5 & !is.na(x)]
标签: r