提取在 R 中随机采样的字符概率

Extracting character probabilities that were randomly sampled in R

我定义了以下变量:

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

我想弄清楚如何在下面的代码中对 'probs' 参数进行子集化以对应于随机采样的字符(即随机采样字符 5:10)

sample(a[min:max], size = round(b/c), replace = TRUE, prob = probs[???])

我认为 probs[min:max] 不会正常工作,但我不确定如何确定它是否正常工作。更复杂的情况是,如果我想要

a[c(1, 3, 5)]

然后我需要 'probs' 来对应字符 1、3 和 5。

我尝试过使用 probs[get(paste0(...))],但这不是最直接和有效的方法。无论如何都行不通。

如有任何建议,我们将不胜感激。

您只需将 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。该函数将负责标准化概率。