Stopping a Loop When a Condition is Met

I created the following loop that generates 1000 random numbers - and then repeats this process 10 times:

results <- list()

for (i in 1:10){

a = rnorm(1000,10,1)
b = rnorm(1000,10,1)


d_i = data.frame(a,b)
d_i$index = 1:nrow(d_i)
d_i$iteration = as.factor(i)

 results[[i]] <- d_i

}



results_df <- do.call(rbind.data.frame, results)

Question: I would like to change this loop such that instead of only generating 1000 random numbers, it keeps generating random numbers until a certain condition is met, for example: KEEP generating random numbers UNTIL d_i$a > 10 AND d_i$b > 10.

Using a "WHILE()" statement, I tried to do this:

results <- list()

for (i in 1:10){

 while (d_i$a > 10 & d_i$b >10) {

a = rnorm(1000,10,1)
b = rnorm(1000,10,1)


d_i = data.frame(a,b)
d_i$index = 1:nrow(d_i)
d_i$iteration = as.factor(i)

 results[[i]] <- d_i

}

}


results_df <- do.call(rbind.data.frame, results)

Problem: However, this returns the following warnings (10 times):

Warning messages:
1: In while (d_i$a > 10 & d_i$b > 10) { :
  the condition has length > 1 and only the first element will be used

And produces an empty table:

> results_df

data frame with 0 columns and 0 rows

Can someone please help me fix this problem?

Thanks!

The code, as supplied, does not run since "d_i" is not defined at the start of the "while" loop. You could define it at the start of the loop, but perhaps a better way is to set a flag to FALSE and define a condition like "flag <- ..." at the end of the loop to determine when the while loop has to be exited.

The other problem is the warning about "the condition has length > 1 and only the first element will be used". That warning is because you have not defined the condition correctly. You would need to do something like: "(all(d_i$a > 10) & all(d_i$b >10))" or something similar. But, again, I'm not sure about your criterion for exiting the loop and what you're trying to achieve.