2016-12-01 193 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