对于带有2个if语句的循环 - 错误:缺少需要TRUE / FALSE的值

时间:2015-08-31 19:14:22

标签: r

我正在写一个" for循环"如果连续条件(不是链,一个"如果"是分开的,并且在第一个&#34之后;如果"),则编程为2。

我在"测试"上运行此循环。矢量(数字向量)。这"测试"变量可以超过"限制"的值。 (数字向量)。但是,如果,在时间[i],"测试"回到下面"限制",这被解释为"重制点"和"限制"在[i + 1]时间增加5。

这是我的代码:

testLimit<-function(test){
Limit<-vector()
remake<-vector()
remakepoint<-vector()
Limit[1]<-test[1]
remakepoint[1]<-0
for(i in 2:length(test)){
  Limit[i]=Limit[i-1]
  if(test[i]<=Limit[i]){
    remake[i]<-0
  } else {
    remake[i]<-1
  }
  remakepoint[i]=remake[i]-remake[i-1]
  if(remakepoint[i]==-1){
    Limit[i+1]=Limit[i]+5
  } else {
    Limit[i+1]=Limit[i]
  }    
}
return(data.frame(test,Limit,remake,remakepoint))    
}

但是,它返回以下错误:

Error in if (remakepoint[i] == -1) { : missing value where TRUE/FALSE needed

我不明白为什么它没有得到重制点[i] == - 1,这刚刚在上面的行中计算过:remakepoint [i] =重制[i] -remake [ I-1]

有人可以帮助我吗?

提前致谢! :)

1 个答案:

答案 0 :(得分:0)

您从未将remake的值设为1,因此第一次remakepoint[i]=remake[i]-remake[i-1]调用会产生NA

remakepoint[2]=remake[2]-remake[1]

要解决此问题,请尝试设置:

remake <- c(0)

而不是:

remake<-vector()

编辑:代码中还有其他几个错误,可能包括用于故障排除目的的所需输入和输出。

如果您的最后一个值大于限制,也会出现错误 - 它会设置下一个限制,并且因限制列的行数多于其余行而中断。您可以通过在返回函数中修剪结束来解决此问题:

return(data.frame(test,Limit[1:length(test)],remake,remakepoint))