如何完成以下R代码

问题描述 投票:-1回答:2

我想使用该函数来计算cusum的arl但是当我运行代码时遇到问题它显示“如果(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)
r
2个回答
0
投票

@jogo已经指出了这个问题。 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:

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)
© www.soinside.com 2019 - 2024. All rights reserved.