【发布时间】:2022-01-02 10:05:30
【问题描述】:
我正在使用 R 编程语言。我创建了以下生成 1000 个随机数的循环 - 然后重复此过程 10 次:
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)
问题:我想改变这个循环,使它不再只生成 1000 个随机数,而是不断生成随机数,直到满足某个条件,例如:KEEP generate random numbers UNTIL d_i $a > 10 AND d_i$b > 10。
使用“WHILE()”语句,我尝试这样做:
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)
问题:但是,这会返回以下警告(10 次):
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
并产生一个空表:
> results_df
data frame with 0 columns and 0 rows
有人可以帮我解决这个问题吗?
谢谢!
【问题讨论】:
-
“直到 d_i$a > 10 AND d_i$b > 10”是什么意思?您创建了 1000 个
as 和bs。这也是警告的原因 -
@mnist:谢谢你的回复!我的意思是,继续生成随机数,直到“d_i”中的第一行出现“d_i$a > 10 AND d_i$b > 10”。
-
即当 d_i$a > 10 AND d_i$b > 10 时停止生成随机数。
-
我仍然不确定您所说的“直到第一行...”是什么意思。您总是生成 1000 行。你的意思是'直到第一个data.frame出现,其中至少有一行同时具有a> 10和b> 10'?
-
@Mnist:谢谢你的回复!由于在满足条件之前我不知道如何生成随机数,因此我只是尝试生成大量随机数,希望在这些随机数中满足所需的条件。你能告诉我怎么做吗?谢谢!
标签: r loops while-loop data-manipulation