我想在R中使用while循环。
我想重复循环,直到evt> 1和cpr> 0,但它不起作用。
work_f是生成数字的功能。
if((evt>1)&&(cpr>0)){
work<-work[order(work$z),]
obs<-c(1:length(work$z))
work<-cbind(work,obs)
} else {
while((evt>1)&&(cpr>0)) {
j<-j+1
seed<-settings*1000+h+j
work_f(studysize = studysize,beta=beta,cutpoint = cutpoint,settings = settigns,p=p,alpha = alpha)
evt<-data.frame(ftable(work$event))
evttr<-data.frame(evt=numeric(1),cpr=numeric(1),csr=numeric(1))
if (p==0) {
evttr$evt<-evt$Freq[1]; evttr$cpr<-evt$Freq[2]; evttr$csr<-0
}else {
evttr$evt<-evt$Freq[2]; evttr$cpr<-evt$Freq[3]; evttr$csr<-evt$Freq[1]
}
evttr[is.na(evttr)]<-0
evt<-as.numeric(evttr$evt); cpr<-as.numeric(evttr$cpr)
if((evt>1)&&(cpr>0)){
work<-work[order(work$z),]
obs<-c(1:length(work$z))
work<-cbind(work,obs)
}
}
}
怎么了?
答案 0 :(得分:3)
很可能你的问题出在你的while循环的头部,因为它永远不会进入你的while循环。如果我删除了大部分代码,这就变得可见了
evt = 0
cpr = 0
if ((evt > 1) && (cpr > 0)) {
cat("a")
} else {
#due to the if (evt > 1) && (cpr > 0)==false
#hence the loop is never entered
while ((evt > 1) && (cpr > 0)) {
cat("b")
}
}
我补充说,你复制了if-true体的代码。
if ((evt > 1) && (cpr > 0)) {
work <- work[order(work$z),]
obs <- c(1:length(work$z))
work <- cbind(work,obs)
}
在循环结束时。我假设一旦你解决了上述问题,你可以重新考虑你的代码,这部分只发生一次。