我收到了错误
Error in if (x[i] == 0 && x[i - 1] > 0) { :
missing value where TRUE/FALSE needed
在数字矢量上运行此功能时
number_rn <- function(x) {
a <- 0
for (i in 1:length(x)) {
if (x[i] == 0 && x[i-1] > 0) {
a <- a +1
}
}
print(a)
}
但是,以下功能可以正常工作:
number_rr <- function(x) {
a <- 0
for (i in 1:length(x)) {
if (x[i] > 0 && x[i-1] > 0) {
a <- a +1
}
}
print(a)
}
我从以前对类似问题的回答中注意到,如果if
条件没有TRUE
或FALSE
的结果,则可能会发生这种情况,但我不认为这是在我的例子中。是什么原因导致此错误?
答案 0 :(得分:1)
for循环存在多个问题(即使x
不包含任何NA
值):
i == 1
)中,x[i-1]
指的是x[0]
,因为R中的索引从1
开始未定义。不幸的是,在i == 2
的一个元素向量的情况下,在for (i in 2:length(x))
(即length(x) == 1
)处开始循环不是防错的。
我的建议是使用矢量化版本
number_rn_vec <- function(x) {
n <- length(x)
sum(x[2:n] == 0 & x[1:(n - 1)] > 0, na.rm = TRUE)
}
在许多情况下,这将返回a
且没有错误:
sapply(
list(
c(),
c(1),
c(1, 0),
c(1, 0, 3),
c(0, 1, 0, 3),
c(NA, 1, 0, 3),
c(1, NA, 0, 3),
c(1, 0, NA, 3),
c(1, 0, 3, NA)
),
number_rn_vec
)
[1] 0 0 1 1 1 1 0 1 1
答案 1 :(得分:0)
最有可能发生这种情况,因为向量x具有NULL或NA值。看看当我尝试运行带有NULL值的if条件时会发生什么-
x <- NULL
if (x == 0 && x > 5) print("yes")
请确保使用is.na()或is.null()删除所有NA或NULL,并且应该没事