代码之家  ›  专栏  ›  技术社区  ›  stats_noob

R: 记录某个“行为”发生的循环的索引?

  •  1
  • stats_noob  · 技术社区  · 2 年前

    在前一个问题中( Generating Random Numbers Until Some Condition Is Met while 循环,不断模拟3个随机数,直到这3个数的总和超过150,然后将此过程重复100次:

    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 = runif(1,0,100)
        num_2_i = runif(1,0,100)
        num_3_i = runif(1,0,100)
      }
      
      inter_results_i <- data.frame(i, num_1_i, num_2_i, num_3_i)
      list_results[[i]] <- inter_results_i
    }
    

    在这个循环中,我知道了如何记录每个一般迭代-但我不确定如何记录发生这种情况的确切子迭代(例如,在第一次迭代中,在满足条件之前需要多少次模拟?)。例如,我希望最终产品看起来像这样:

      index num_1 num_2 num_3 sub_index
    1     1    89    81    92        44
    2     2    62    99    77        21
    3     3    76    88    69        17
    

    有人能告诉我怎么做吗?

    谢谢

    1 回复  |  直到 2 年前
        1
  •  2
  •   Zheyuan Li    2 年前
    list_results <- vector("list", 100)  ## better than list()
    
    for (i in 1:100){
      num_1_i = num_2_i = num_3_i = 0
      
      sub_index <- 1  ## count it
      while(num_1_i + num_2_i + num_3_i < 150){
        num_1_i = runif(1,0,100)
        num_2_i = runif(1,0,100)
        num_3_i = runif(1,0,100)
        sub_index <- sub_index + 1  ## increase it
      }
      
      inter_results_i <- data.frame(i, num_1_i, num_2_i, num_3_i, sub_index)## save it
      list_results[[i]] <- inter_results_i
    }
    
    do.call(rbind, list_results)