[Solved] For loop in R(no clue how stop the loop and continue with the rest of my code)


If I understand you correctly, you want to loop while a condition is true and exit the loop when the condition become false. So you should be using the while control-flow operator, not 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

But there’s really no need for loop here.

# 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)
}

I don’t know what you want to do but if your plan is to treat all the ‘i’ sequentially, you may actually want to work with zero_length_ind and treat all your zeros at once.

For example if you want to remove all the values in path corresponding to zero length in blocks, you should directly do:

path <- path[-zero_length_ind,-zero_length_ind]

(Note that if there is no zero length element in blocks, then zero_length_ind will be integer(0) (that is, an empty integer vector) and you can’t use it to index path. This might save you some debugging time.)

4

solved For loop in R(no clue how stop the loop and continue with the rest of my code)