Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
提取在R中随机抽样的特征概率_R_Subset_Sample - Fatal编程技术网

提取在R中随机抽样的特征概率

提取在R中随机抽样的特征概率,r,subset,sample,R,Subset,Sample,我定义了以下变量: 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[min:max]会像它应该的那样工作,但我不确定如何确定它是否工作。更复杂的情况是如果我想要 a[c(1, 3, 5)] 然后我需要“probs”来对应字符1、3和5 我尝试过使用probs[get(paste0(…)

我定义了以下变量:

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[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。函数将负责规范化概率。

你能不能重新缩放
probs[min:max]/sum(probs[min:max])
使之和为1?@RuiBarradas这就引出了一个我忽略了提到的问题,我认为prob中的概率不会与随机采样的字符标签相对应……是的,我相信会的。或者至少我是这样阅读
sample
的帮助页面的:
prob-一个概率权重向量,用于获取被采样向量的元素。
还请注意,概率会自动重新缩放为1,因此我评论中的代码将是无用的。好的,谢谢!试试看!
set.seed(123)
tmp = sample(a[min:max], size = 10000, replace = TRUE, prob = probs[min:max])
table(tmp)/10000 # the observed probabilities