我想用这个函数来计算cusum的arl 但是我遇到了一个问题 当我运行代码 它显示" if(r [i]> h1)中断的错误:缺少值,其中需要TRUE / FALSE"对我来说。 我不知道如何编写正确的代码
myfun2<-function(c1,h1){
r=rep(0,500)
for (i in 1:499){
r[i+1]<-max(0,c1[i]+0.85*r[i])
(arl<-i)
if(r[i]>h1) break
}
result<-arl
}
m=sapply(c,h=0.1865,myfun2)
答案 0 :(得分:0)
sapply
正在浏览c
的每个元素。由于您的示例不是完全可重现的,因此很难知道c
是什么,但如果它是一个向量,那么这就是问题(注意打印语句):
> myfun2 <- function(c1, h1) {
+ r <- rep(0, 500)
+ for (i in 1:499) {
+ print(sprintf("c1[i]: %s, h1: %s, r[i] %s", c1[i], h1, r[i]))
+ r[i + 1] <- max(0, c1[i] + 0.85*r[i])
+ arl <- i
+ if (r[i] > h1) break
+ }
+ arl
+ }
>
> set.seed(357)
> c1 <- rnorm(10)
> m <- sapply(c1, h = 0.1865, FUN = myfun2)
[1] "c1[i]: -1.24111730713255, h1: 0.1865, r[i] 0"
[1] "c1[i]: NA, h1: 0.1865, r[i] 0"
[1] "c1[i]: NA, h1: 0.1865, r[i] NA"
Error in if (r[i] > h1) break : missing value where TRUE/FALSE needed
Error during wrapup:
答案 1 :(得分:0)
现在我已经知道如何编辑,为了使代码更有效,我编辑代码。
myfun2<-function(n1,h1){
r=0
i=0
for (x in n1){
b<-max(0,x+0.85*r)
r=b
if(r>h1) break
i<-i+1
}
return(i)
}
arl=myfun2(ny,0.1865)