R: WHILE循环产生相同的结果



我正在使用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
}

由于某些原因,这有效!

最新更新