Gwennaël Bataille
2014-Mar-20 08:55 UTC
How to make a code last until a condition is completed ?
# Dear all, # I simulate individual paths in a landscape (let's say coordinates in x and y range # from -100 to 100 both) and would like to replace each individual going outside the # landscape by a new simulation... until none of them goes outside the landscape. # For example, I simulate 100 coordinates : # Step 1 : Simulate the individuals coordinates paths_x <- rnorm(100)*100 # This is a simplification for the example paths_y <- rnorm(100)*100 # Step 2 : Detect individuals outside the landscape to simulate them again # The OUTSIDE variable tells if we need further simulations or not # The OUTSIDE_IND variable informs about which individuals are outside the landscape IS_OUTSIDE <- c(-min(paths_x), max(paths_x), -min(paths_y), max(paths_y)) # this gives the absolute value of min and max if( any(IS_OUTSIDE > 100) ) { OUTSIDE <- TRUE } else { OUTSIDE <- FALSE } if(OUTSIDE == TRUE) { OUTSIDE_IND <- c(which(paths_x < -100), which(paths_x > 100), which(paths_y < - 100), which(paths_y > 100)) } # Identifies the outliers # What I would like to do is : if( OUTSIDE == TRUE ) { # Go to step 1 again paths_x[ OUTSIDE_IND ] <- rnorm(100)[ length( OUTSIDE_IND ) ]*100 paths_y[ OUTSIDE_IND ] <- rnorm(100)[ length( OUTSIDE_IND ) ]*100 } # And then, go to step 2 again : # are there some individuals outside the landscape again ? -> if yes, go to step 1 untill none is left else { # Go to step 3 } # I could easily copy-paste steps 1 and 2 a lot of time, but I want to make sure all the individuals are OK, # that none remains outside the landscape "by chance" # Thank you very much in advance for your help, # Gwennaël Bataille -- Gwennaël BATAILLE, PhD student - Teaching assistant Earth and Life Institute Université Catholique de Louvain SST/ELI/ELIB Bâtiment Carnoy, c.145 Croix du sud 4-5, bte L7.07.04 1348 Louvain-la-Neuve BELGIUM