【问题标题】:R: how to write a function that samples given the probabilityR:如何编写一个给定概率采样的函数
【发布时间】:2014-10-22 20:33:25
【问题描述】:

我写了一个函数

p = c(0.4, 0.6)
myfun = function(p){
    sample(1:2, 1, replace = TRUE, prob = p)
}

我想重复 5 次。

sapply(1:5, myfun)

但这给了我一个错误

sample.int(length(x), size, replace, prob) 中的错误:不正确 概率数

【问题讨论】:

  • 也许你想从 1:2 取样?否则 prob 的长度必须为 10...
  • 啊,是的。对不起。我想从 1:2 采样,但我仍然得到同样的错误。
  • replicate(5, sample(2, replace = TRUE, prob = c(0.4, 0.6)))
  • p 在您的情况下未使用。 Sapply 每次都会为 myfun 提供 1 到 5 个。
  • @Indicator。因此,如果我想对此使用 sapply,我尝试了 sapply(1:5, myfun(p)) 但这也不起作用。

标签: r sapply


【解决方案1】:

您可以使用replicate 编写您的函数。

myfun <- function(x, p, n, replace = TRUE) {
    m <- replicate(n, sample(x, replace = replace, prob = p))
    if(n == 1) c(m) else m
}
myfun(2, c(0.4, 0.6), 5)
#      [,1] [,2] [,3] [,4] [,5]
# [1,]    1    1    2    2    2
# [2,]    2    2    2    1    2
myfun(2, c(0.4, 0.6), 1)
# [1] 2 1

【讨论】:

    【解决方案2】:

    您可以使用sample 函数对 5 个值进行采样。

    p <- c(0.4, 0.6)
    sample(1:2, 5, replace = TRUE, prob = p)
    # [1] 2 2 2 2 1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-18
      • 2017-11-26
      • 2018-07-18
      相关资源
      最近更新 更多