无限的麻烦 - 在R中重复循环

时间:2013-12-05 19:28:50

标签: r for-loop infinite-loop repeat

我已经生成了一个无限循环,并且不知道如何修复它。

我基本上想要浏览数据框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]) }

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

问题是你没有在i循环中增加repeat,所以基本上你一直在测试相同的i,因为rnum[i] < C(来自{ {1}}条件)自if以来它始终为rnum[i] < E,循环永不中断。 但是,如果您在C < E内增加i,它仍会返回repeat循环产生的值,因此您必须以不同的方式执行此操作,例如使用for环。我不确定我是否理解你要做的事情,但根据你的描述,我已经完成了这个功能:

while