我正在写一个" 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]
有人可以帮助我吗?
提前致谢! :)
答案 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))