我定义了以下变量:
a <- as.character(1:10)
b <- 100
c <- 10
probs <- c(0.3, 0.3, 0.3, rep(0.1/7, 7))
min <- 5
max <- 10
我正在试图弄清楚如何将&#39; probs&#39;下面代码中的参数与随机抽样的字符(即随机抽样字符5:10)对应
sample(a[min:max], size = round(b/c), replace = TRUE, prob = probs[???])
我不认为probs [min:max]会按预期工作,但我不确定如何确定是否确实如此。更复杂的情况是我想要像
这样的东西a[c(1, 3, 5)]
然后我需要&#39; probs&#39;对应于字符1,3和5。
我尝试过使用probs [get(paste0(...))],但这不是最直接有效的方法。它无论如何都不起作用。
任何建议表示赞赏。
答案 0 :(得分:2)
您只需将probs
的子集与a
的子集相同,例如
index = min:max
sample(a[index], size = round(b/c), replace = TRUE, prob = probs[index])
对于更复杂的情况,请设置index = c(1,3,5)
。
你可以看到,这可以通过模拟并将观察到的概率与真实概率进行比较来实现:
set.seed(123)
tmp = sample(a[min:max], size = 10000, replace = TRUE, prob = probs[min:max])
table(tmp)/10000 # the observed probabilities
观察到的概率大致相等,这与真实概率相等是一致的。
如果您查看sample
的帮助文件,您会发现prob
不需要总和为1.该函数将负责规范概率。< / p>