';缺少需要TRUE/FALSE的值';
我收到了错误';缺少需要TRUE/FALSE的值';,r,R,我收到了错误 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
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\u rn这很可能发生,因为向量x有空值或NA值。看看当我尝试运行带有NULL值的if条件时会发生什么-
x <- NULL
if (x == 0 && x > 5) print("yes")
x5)打印(“是”)
确保使用is.na()或is.null()删除任何NAs或空值,您应该会很好for循环存在一些问题(即使x
不包含任何na
值):
在第一次迭代(i==1
)中,x[i-1]
指的是x[0]
,由于R中的索引从1
开始,因此未定义
代码使用for循环,其中可以使用矢量化函数
不幸的是,在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)
}
你在哪个向量上运行函数?很可能i
大于x
的长度。无论如何,您的术语之一是NA,请检查i
,x[i]
,x[i-1]
…我的向量中没有空值或NA值。然而,我相信当向量的第一个元素为零时,问题就会出现。在这种情况下,x[i]==0计算为true,x[i-1]>0计算为NA。如果x[1]=0,解决方案可能是跳到下一个元素?如果有的话,有什么办法吗?谢谢
number_rn_vec <- function(x) {
n <- length(x)
sum(x[2:n] == 0 & x[1:(n - 1)] > 0, na.rm = TRUE)
}
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