下面是一个玩具模型的东西,是造成我的问题。我有一个T和F的向量。我想遍历这个向量,如果最后3个元素的总和大于等于1(这意味着至少有1个元素为TRUE),我将空向量中的元素赋值为1,否则我在空向量为0.这样,当for循环遍历起始向量时,我用1和0填充空向量。我遇到的问题是一个错误,我将在下面粘贴。如果语句内循环
two_true <- c(T,F,F,F,F,F,F,F,F,T,T,T,F,F,T,F,F,F,F,F,F)
look_bac <- 3
no_signal1 <- c()
for(i in 1:length(two_true)) {
if(sum(two_true[i:(i+look_bac-1)]) >= 1) {
no_signal1[i] <- 1
} else {
no_signal1[i] <- 0
}
}
运行这给了我以下错误:
错误如果(总和(two_true [I:第(i + look_bac - 1)])> = 1){: 缺失值,其中TRUE/FALSE需要
我似乎并没有得到这个,因为if语句的条件显然是TRUE或FALSE变体。我知道可能有许多其他方法来创建这个新的向量,但我想学习R基础知识,所以使用上述工具(如果语句和for循环)的任何帮助将有所帮助。谢谢!
调试循环时,最好知道问题是否仅在某些迭代中发生。在你的循环中放入一个'print(i)'命令,运行所有内容,并查看错误之前循环得到多少。然后,当你看到'i'是20或21时可能会发生问题,将'i'设置为其中一个值并运行违规行:'sum(two_true [i:(i + look_bac-1)]) > = 1'。你可以减少它,并找到问题,'two_true [我:((i + look_bac-1)]',并思考为什么它不适用于'我'的价值。 – Gregor
,因为当你20岁以后,你的if语句将返回NA,这就是为什么你会收到错误信息。 – fhlgood
第一条评论:*如何钓鱼*;第二条评论*这里是你的鱼*。 – Gregor