【问题标题】:R - Simulate sum of numbers [0-9]R - 模拟数字的总和 [0-9]
【发布时间】:2021-04-20 14:21:35
【问题描述】:

我对使用 R 进行编码非常陌生,想要一些有关如何生成此函数的指导。

我有一个数字池 0 ,1 ,2 ,3 , 4, 5, 6, 7, 8, 9

我将从该池中抽取 3 个数字进行总和。

我想运行 100 次。

我从池中抽出的 3 个数字必须是唯一的。 即 9,9,9 不能从池中提取。

我目前的代码是这样的。

numbers_in_box <- c(0,1,2,3,4,5,6,7,8,9)
# sample(numbers_in_box,3, replace = FALSE)
replicate(n = 100,sample(numbers_in_box,3, replace = FALSE),simplify = FALSE)

谢谢

【问题讨论】:

    标签: r simulate


    【解决方案1】:

    问题中的代码没有错,我会改为simplify = TRUE,然后从设置伪RNG种子开始。然后分配replicatecolSums的输出得到总和。

    set.seed(2021)    # Make the results reproducible
    
    numbers_in_box <- c(0,1,2,3,4,5,6,7,8,9)
    # sample(numbers_in_box,3, replace = FALSE)
    x <- replicate(n = 100,sample(numbers_in_box,3, replace = FALSE),simplify = TRUE)
    
    colSums(x)
    #  [1] 19 18 15 22 10 11  8 14  8 12 18  8 14 10 13 16 12 12  3 15 12
    # [22] 10  6  7 17 21  6 23 17  8  8 10 15 15 15 16 11 11  8  7 18 17
    # [43] 18 10  8 12 15 17 16 20 14 14 19 17 11 14 12 14 17 19  7  6 19
    # [64]  9 21 19 15 19 18 20 15 13  7 13 21 12 21 16 17 18 20  4 13  8
    # [85] 17  8 15 15 15 21 14  8 11 15 17 10 20 18  9  9
    

    【讨论】:

      【解决方案2】:

      在您的replicate() 中拨打sum() 电话:

      replicate(n = 100, sum(sample(numbers_in_box,3, replace = FALSE)), simplify = TRUE)
      

      另外,正如@Rui 所建议的,我建议将simplify 更改为TRUE,除非出于某种原因你真的想要一个列表输出而不是一个向量。

      【讨论】:

        【解决方案3】:

        我们可以使用rerun

        library(purrr)
        rerun(100, sample(numbers_in_box,3, replace = FALSE))
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2023-01-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-02-07
          • 2022-07-24
          • 1970-01-01
          相关资源
          最近更新 更多