【问题标题】:Problem assigning probabilities in sample function在样本函数中分配概率的问题
【发布时间】:2020-02-19 05:18:28
【问题描述】:

我通过以下方式生成了一堆变量:

max_no=10
list2env(setNames(as.list(c(0.2, 0.25,0.15, 0.1, 0.1, 0.05, 0.03, 0.06, 0.03, 0.02, 0.01)), paste0("proportion", 0:max_no)), envir = .GlobalEnv)

这些生成对象,如“proportion0”、“proportion1”、...、“proportion10”,其值为 0.2、0.25....等。

我想将这些比例值作为概率向量插入到示例函数中,如下所示:

sample(seq.int(0, max_no, 1), size=10000, replace=TRUE, prob=c(paste0("proportion", 0:max_no)))

但我收到错误消息:sample.int(length(x), size, replace, prob) 中的错误:概率向量中的 NA

输入概率的简单方法是什么?

【问题讨论】:

  • 为什么要将所有这些比例放入不同的变量中?这使得它很难工作。为什么不将它们保存在一个可以传递给prob= 的简单向量中?只需probs <- c(0.2, 0.25,0.15, 0.1, 0.1, 0.05, 0.03, 0.06, 0.03, 0.02, 0.01)sample(seq.int(0, max_no, 1), size=10000, replace=TRUE, prob=probs)。您可以通过probs[1]probs[2] 等获取单个值
  • 我正在运行一个需要动态创建变量的模拟。我选择的选项在创建和更改概率方面看起来最简单..
  • 我强烈建议不要这样做。使用proportion[1]proportion[2] 等而不是proportion0proportion1 等会更容易做事。名称中带有索引的变量表明你做事的速度并不快“R-like”方式只会让自己变得更难。

标签: r


【解决方案1】:

我不确定这有什么用例,但您可以使用 mgetunlist

sample(seq.int(0, max_no, 1), size=10000, replace=TRUE, 
       prob=unlist(mget(c(paste0("proportion", 0:max_no)))))

为什么不直接传递概率而不是将每个数字存储在不同的变量中?

sample(seq.int(0, max_no, 1), size=10000, replace=TRUE, 
       prob=c(0.2, 0.25,0.15, 0.1, 0.1, 0.05, 0.03, 0.06, 0.03, 0.02, 0.01))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-08
    • 2011-10-27
    • 1970-01-01
    • 2016-07-09
    • 2014-07-04
    相关资源
    最近更新 更多