我已经生成了一个无限循环,并且不知道如何修复它。
我基本上想要浏览数据框rnumbers
并使用1,-1或0生成rstate2
,具体取决于rnumbers
函数step_generator
卡在repeat
函数中。如果rstate2
小于C,我不确定如何将代码置于rnumber
中,然后对下一行重复ifelse
函数,直到值为D或更大为止获得。获得D后退出repeat
函数并返回原始for
循环。
这是我的代码:
rnumbers <- data.frame(replicate(5,runif(20000, 0, 1)))
dt <- c(.01)
A <- .01
B <- .0025
C <- .0003
D <- .003
E <- .05
rstate <- rnumbers # copy the structure
rstate[] <- NA # preserve structure with NA's
# Init:
rstate[1, ] <- c(0)
step_generator <- function(col, rnum){
for (i in 2:length(col) ){
if( rnum[i] < C) {
col[i] <- -1
repeat {
ifelse(rnum[i] < E, -1, if(rnum[i] >= D) {break})
}
}
else { if (rnum[i] < B) {col[i] <- -1 }
else {ifelse(rnum[i] < A, 1, 0) } }
}
return(col)
}
# Run for each column index:
for(cl in 1:5){ rstate[ , cl] <-
step_generator(rstate[,cl], rnumbers[,cl]) }
感谢您的帮助。
答案 0 :(得分:1)
问题是你没有在i
循环中增加repeat
,所以基本上你一直在测试相同的i
,因为rnum[i] < C
(来自{ {1}}条件)自if
以来它始终为rnum[i] < E
,循环永不中断。
但是,如果您在C < E
内增加i
,它仍会返回repeat
循环产生的值,因此您必须以不同的方式执行此操作,例如使用for
环。我不确定我是否理解你要做的事情,但根据你的描述,我已经完成了这个功能:
while