2016-12-01 312 views
1

我知道如何对break out of a for loop有一个答案,但是当条件满足时我仍然无法摆脱for循环,然后继续到外循环中的表达式:嵌套for循环

x <- 1:100 
n <- as.factor(rep(c(1:5), 20)) 
data <- data.frame(x, n) 
y <- 1:20 
m <- 10 

for(i in levels(n)){ 
    x.subset <- subset(data$x, data$n == i) 

    for(j in 1:length(y)){ 
    x.big <- NULL 
    x.big[j] <- x.subset[j]^2 
    x.big.prev <- x.big ##### 

    if((mean(x.big.prev)-mean(x.big)) >=30){ 
      break 
     } #end of if() statement 
     } #end of j-loop 
     plot(y, x.big.prev) 
} #end of i loop 

我试图让j循环由30我试图阻止时,新x.subset(从i一组新的值)比以前x.subet更大的平均通过与比较x.big.prevx.big。我不是一直得到两种结果之一:

Error in if ((mean(x.big.prev) - mean(x.big)) >= 30) { : 
missing value where TRUE/FALSE needed 

OR

它贯穿于j的所有迭代和刚刚绘制的一切。

我想我把表达式x.big.prev <- x.big放在错误的地方,但是再次,我不确定在哪里放置以允许两个向量的平均值之间的比较。

任何想法?

+0

你需要把'x.big.prev <:试试这个。 PS:'x.subset < - subset(data,n == i,select = x)'是正确的语法。当然'data [data $ n == i,“x”]'通常是可取的。 – Roland

+0

一个小问题(也许只适用于你的例子):当你定义'y < - 1:20'时,'for(j in y)'和'for(j in 1:length(y) '。 – LAP

+0

@Roland,即使在这个时候他/她的设置,'mean(x.big.prev)-mean(x.big)'应该导致为'0',并且在使用时不会产生错误消息'if()'-statement,or it it? – LAP

回答

1

您需要初始化x.bigx.big.prev以外的内部循环。在内循环内重新定义x.big.prev必须在if()-陈述之后完成。在`if`条件之后x.big`和初始化`内环外x.big.prev` -

for(i in levels(n)){ 
    x.subset <- subset(data$x, data$n == i) 
    x.big <- NULL 
    x.big.prev <- 1 

    for(j in y){ 
    x.big[j] <- x.subset[j]^2 

    if((mean(x.big.prev)-mean(x.big)) >=30){ 
      break 
     } #end of if() statement 
    x.big.prev <- x.big ##### 
     } #end of j-loop 
     plot(y, x.big.prev) 
} #end of i loop