【问题标题】:Struggling with simulating N rolls for K dice为 K 骰子模拟 N 次掷骰而苦苦挣扎
【发布时间】:2021-02-12 20:54:57
【问题描述】:

函数dice 接受一个参数n,表示单个六面骰子的滚动数。它返回一个长度为n 的向量,其元素为整数b/w 1 和6。我为下面的骰子函数创建了以下代码。当我测试它时,它似乎运行正常。

dice <- function(n) {
     x <- c(1:6)
     sample(length(x), size = n, replace = TRUE, prob = x)

   }

函数kdice 有两个参数,n 和k。参数 n 表示完成的滚动次数。掷骰子的数量由参数 k 表示。该函数应返回 k 个骰子的总和,滚动 n 次。不知何故,我必须在这个函数中实现 dice() 。以下是我到目前为止完成的内容,但是该函数没有返回任何内容。我有一个 If 和 Else 语句,以确保至少 1 个骰子至少掷了 1 次。 While循环就是让NumofDice的总和被输出,直到达到n。希望有任何见解,尤其是如何将函数 Dice() 合并到 kdice() 中。

kdice <- function(k, n){
  NumofDice <- sample(1:6, size = k, replace = TRUE)
  RollCount = 0
      if(k>0 && n>0) {
         while(RollCount < n) {
           RollCount = RollCount + 1
           sum(NumofDice)
         }
    }
      else {
        print("No number of dices were rolled")
    }

}

【问题讨论】:

  • 请注意prob 参数。 sample 的默认值是骰子每一面的概率相等。您设置prob = 1:6,这意味着1 的概率是1/21,概率2 是2/21,概率3 是3/21,等等(因为21sum(1:6))。将参数留空以使用等概率默认值。
  • 这有点令人困惑,因为滚动 n 次骰子 k 次与滚动 n*k 次骰子相同。我认为你有一个问题,因为你使用 length(x) 而不是 x 作为被采样的向量。长度 x 将只是例如6.
  • 好的,我将摆脱概率并使用 x 代替长度(x)。谢谢

标签: r


【解决方案1】:
kdice <- function(k, n){
  if(k>0 && n>0){
    replicate(n, sum(sample(c(1:6),k, replace=TRUE)))
  }
  else {
    print("No number of dices were rolled")
  }
}

kdice(4,2)
[1] 15  8

【讨论】:

    【解决方案2】:

    您可以尝试使用replicate + colSums 定义kdice,如下所示

    kdice <- function(k, n) {
      tryCatch(
        colSums(matrix(replicate(n, dice(k)), nrow = k)),
        error = function(e) print("No number of dices were rolled")
      )
    }
    

    给出类似的结果

    > kdice(4, 5)
    [1] 17 14 22 13 11
    
    > kdice(4, 0)
    [1] "No number of dices were rolled"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多