我想在0到1之间采样一个随机数,90%的概率从0-0.3采样,10%采样在0.3-1之间。
我尝试了以下内容:
0.9*runif(1, 0, 0.3) + 0.1*runif(1, 0.3, 1)
但事实并非如此:例如,我永远不会得到数字0.8。
在Base R中有一种简单的方法吗?
答案 0 :(得分:4)
sample(c(runif(1,0,0.3),runif(1,0.3,1)),1,prob=c(0.9,0.1))
答案 1 :(得分:0)
通常在R中你想以矢量化的方式做事。因此,不要在当时绘制数字,而是在一次调用中绘制所有数字(更快)。在这里,您可以使用sample
绘制更高的极值和平局。像这样:
nsamples<-100000
res<-runif(nsamples,0,sample(c(0.03,1),nsamples,TRUE,prob=c(10,90)))
#just to check the result
hist(res)
#this should be around 0.127(=0.9*0.03+0.1*1) if correct
mean(res<0.03)
答案 2 :(得分:0)
您可以随时编写一个小功能来完成工作。
runif_probs <- function(n, p = 0.9, cutpoint = 0.3){
ifelse(runif(n) <= p, runif(n, 0, cutpoint), runif(n, cutpoint, 1))
}
set.seed(8862)
which(runif_probs(100) > 0.8)
#[1] 38 62