我有下面的循环,它不断生成3个随机数,直到这3个随机数的和正好是10。然后,它会重复这个过程100次。下面是它的代码:
for (i in 1:100){
num_1_i = num_2_i = num_3_i = 0
while(num_1_i + num_2_i + num_3_i != 10){
num_1_i = runif(1,0,5)
num_2_i = runif(1,0,5)
num_3_i = runif(1,0,5)
}
inter_results_i <- data.frame(i, num_1_i, num_2_i, num_3_i)
list_results[[i]] <- inter_results_i
}
我知道这个WHILE循环将花费很长时间来运行,因为WHILE条件非常"严格"。(也就是说,很难想出3个随机数加起来等于一个特定的数字)。假设我运行这个WHILE循环几个小时和注意,代码仍在运行,如果我是"interrupt"计算机(如点击"中断"按钮);在R中,即角落的红色停止标志),我可能会丢失所有的"进度"。(例如,假设计算机生成5个和为10的三元组)
我的问题:是否可以这样改变while循环,使得在中断时,"中间进程";保存在"list_results"对象?我有兴趣学习如何修改WHILE循环的通用代码,以便在中断时保存中间进程。
注意:我很想看看如何编写能够存储中间结果的任何WHILE LOOP的示例。
在for
循环之前将list_results
定义为空列表如果您尝试以下代码
list_results <- list()
for (i in 1:1000){
num_1_i = num_2_i = num_3_i = 0
while(num_1_i + num_2_i + num_3_i != 150){
num_1_i = sample(1:100 , 1)
num_2_i = sample(1:100 , 1)
num_3_i = sample(1:100 , 1)
}
inter_results_i <- data.frame(i, num_1_i, num_2_i, num_3_i)
list_results[[i]] <- inter_results_i
}
并快速中断进程,您将在list_results
中找到一些值,但不是1000个值