我正在使用R编程语言。在上一个问题(while循环是否存储中间结果?)中,我学习了如何编写第一个while循环:
list_results <- list()
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 < 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
}
我现在试图修改这个WHILE循环。我想:
- 从"虹膜数据集"中随机抽取3个样本
- 取"sepal . length"的平均值。从这3个随机样本中选取
- 直到这3个平均值之和大于20
- 重复100次
我试着调整上面的代码:
list_results <- list()
for (i in 1:100){
ctotal_i = c1_i = c2_i = c3_i = 0
while(ctotal_i < 20 ){
num_1_i = sample(iris , replace = TRUE, 30)
num_2_i = sample(iris , replace = TRUE, 30)
num_3_i = sample(iris , replace = TRUE, 30)
c1_i = mean(num_1_i$Sepal.Length)
c2_i = mean(num_2_i$Sepal.Length)
c3_i = mean(num_3_i$Sepal.Length)
ctotal_i = c1_i + c2_i + c3_i
}
inter_results_i <- data.frame(i, c1_i, c2_i, c3_i, ctotal_i)
list_results[[i]] <- inter_results_i
}
但是这会给我以下错误:
Error in while (ctotal_i < 15) { : missing value where TRUE/FALSE needed
In addition: Warning message:
In mean.default(num_1_i$Sepal.Length) :
argument is not numeric or logical: returning NA
有人能告诉我我做错了什么,我怎么能解决这个问题?
谢谢!
OP在这里-我想我解决了自己的问题!我用了"dply"示例函数代替:
list_results <- list()
for (i in 1:100){
c1_i = c2_i = c3_i = 0
while(c1_i + c2_i + c3_i < 15 ){
num_1_i = sample_n(iris, 30)
num_2_i = sample_n(iris, 30)
num_3_i = sample_n(iris, 30)
c1_i = mean(num_1_i$Sepal.Length)
c2_i = mean(num_2_i$Sepal.Length)
c3_i = mean(num_3_i$Sepal.Length)
ctotal_i = c1_i + c2_i + c3_i
}
inter_results_i <- data.frame(i, c1_i, c2_i, c3_i, ctotal_i)
list_results[[i]] <- inter_results_i
}
由于某些原因,这有效!