R 订阅的分配中不允许使用NAs

R 订阅的分配中不允许使用NAs,r,R,我有一个简单的问题,但我无法理解克服它的逻辑 我有NAs的数字向量,希望对它们应用条件相关的操作 与我的问题类似的一个简单示例是: 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] 最好不必进行for循环,因为这个操作已经在一个空建模函数中,需要花费很多时间进行大量迭代 提前谢谢大家,, 莱昂纳多 注意。NAs表示不可用值我认为您是在混合分配和订阅。我

我有一个简单的问题,但我无法理解克服它的逻辑

我有NAs的数字向量,希望对它们应用条件相关的操作

与我的问题类似的一个简单示例是:

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]
最好不必进行for循环,因为这个操作已经在一个空建模函数中,需要花费很多时间进行大量迭代

提前谢谢大家,, 莱昂纳多


注意。NAs表示不可用值

我认为您是在混合分配和订阅。我相信你所追求的是更接近这一点的东西:

x <- c(1,3,5,7,NA,2,4,6)
x.greater <- c(1:8)[x>=5]
x.less <- (c(1:8)*10)[x<5]

x.greater
# 3  4 NA  8
x.less
# 10 20 NA 60 70

result <- c(x.greater, x.less)
result
# 3  4 NA  8 10 20 NA 60 70

x您的逻辑还需要在子集中排除NAs。请参见下面的示例。注意:在修改
x
之前,子集向量被存储起来

x <- c(1,3,5,7,NA,2,4,6)
subset1 <- x>=5 & !is.na(x)
subset2 <-  x<5 & !is.na(x)

x[subset1] <- which(subset1)
x[subset2] <- 10*which(subset2)

x
x这很有趣。似乎只有在RHS上有多个值时,才能在子集设置和赋值时将整数与NA结合起来。。。也就是说,
x[c(NA,1)]这是一个有价值的问题,因为它从错误信息中得到了答案。但需要注意的是,即使您的代码在没有NA导致错误的情况下运行,也不会产生预期的结果。代码的第2行将覆盖用于预测上面3和4的结果的原始值5和7(而不是30和40),在调用第3行时,它们将是3和4,从而使它们变成30和40。试试看:
x[x>=5&!is.na(x)]=5&!is.na(x)];x[x
x <- c(1,3,5,7,NA,2,4,6)
subset1 <- x>=5 & !is.na(x)
subset2 <-  x<5 & !is.na(x)

x[subset1] <- which(subset1)
x[subset2] <- 10*which(subset2)
x <- c(1,3,5,7,NA,2,4,6)

x.greater <- c(1:8)*(x>=5)
# 0  0  3  4 NA  0  0  8

x.less <- c(1:8)*10*(x<5)
# 10 20  0  0 NA 60 70  0

result <- x.greater + x.less
# 10 20  3  4 NA 60 70  8