如果我理解正確的話,你要循環,當條件爲真,並退出循環當條件爲假。所以你應該使用控制流操作符while
,而不是for
。
i <- 1
while(i<=length(blocks) & length(blocks[[i]])!=0){
i <- i+1
}
# check that we exited the loop because there was a zero
# and not because we went through all the blocks
if(i != length(blocks+1)) {
path <- path[ -i , -i]
modes = rep("A", nrow(path))
blocks[[i]] = NULL
}
# rest of your code
但是這裏真的沒有必要循環。
# apply 'length' to every element of the list blocks
# returns a vector containing all the lengths
all_length <- sapply(blocks, FUN=length)
# check that there is at least one zero
if(any(all_length==0)) {
# find the indexes of the zeros in 'all_length'
zero_length_ind <- which(all_length==0)
# this is the index of the first zero
i <- min(zero_length_ind)
}
我不知道你想做的事,但如果你的計劃是把所有的「我」順序,你實際上可能想zero_length_ind
工作,並立刻把所有的零。
例如,如果你想與刪除所有值path
零長度blocks
,你應該直接做:
path <- path[-zero_length_ind,-zero_length_ind]
(請注意,如果在塊沒有零長度元素,然後zero_length_ind
將是integer(0)
(也就是一個空整數向量),你不能用它來索引path
。這可能爲你節省一些調試時間。)
嘗試閱讀'help(「for」)'? (你會了解'next'和'stop') – Cath
不是一個答案,只是一個評論......如果你這樣做了,你應該在問題中提到它。許多人沒有閱讀幫助,你的問題的答案確實在幫助,因此我的「明顯的評論」... – Cath
@詹姆斯馬歇爾不需要諷刺。您的問題中沒有任何內容顯示您已嘗試在下一個/停止/中斷某處。問問你自己是否真的描述了你的問題。並閱讀[如何問](http://stackoverflow.com/help/how-to-ask) – Tensibai