R中无限for-repeat循环的问题
我生成了一个无限循环,不知道如何修复它 我基本上希望遍历数据帧R中无限for-repeat循环的问题,r,for-loop,infinite-loop,repeat,R,For Loop,Infinite Loop,Repeat,我生成了一个无限循环,不知道如何修复它 我基本上希望遍历数据帧rnumbers并根据rnumbers中的内容生成带有1、-1或0的rstate2 功能step\u生成器卡在repeat功能上。如果rnumber小于C,我不知道如何使rstate2中的代码put-1小于C,然后对下一行重复ifelse函数,直到获得D或更大的值。获得D后,退出repeat功能并返回原始for循环 这是我的密码: rnumbers <- data.frame(replicate(5,runif(20000, 0
rnumbers
并根据rnumbers
中的内容生成带有1、-1或0的rstate2
功能step\u生成器
卡在repeat
功能上。如果rnumber
小于C,我不知道如何使rstate2中的代码put-1小于C,然后对下一行重复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]) }
rnumbers问题在于,在重复循环中,你没有增加i
,因此基本上你一直在测试相同的i
,因为rnum[i]
(从如果条件)它将始终是rnum[i]
,因为C
,循环从未中断。
但是,如果在repeat
中增加i
,它仍然会返回到for
循环产生的值,因此必须以不同的方式执行,例如使用while
循环。我不确定我是否理解您的意图,但根据您的描述,我已完成以下功能:
step_generator <- function(col, rnum){
i <- 2
while (i <= length(col)){
if (rnum[i] < C) {
col[i] <- -1
while ((i < length(col)) & (rnum[i + 1] < D)){
i <- i + 1
col[i] <- -1
}
} else if (rnum[i] < B){
col[i] <- -1
} else if (rnum[i] < A){
col[i] <- 1
} else {
col [i] <- 0
}
i <- i + 1
}
return(col)
}
step\u生成器ifelse
不是编程控件。我猜问题出现在这里:ifelse(rnum[I]=D){break})
。我没有看过你的代码的逻辑,但可能会用if(cond){cons}else{alt}