【发布时间】:2018-06-30 05:05:44
【问题描述】:
当我想在排除特定值(例如 0.5)的情况下在特定间隔内生成带有 runif() 的随机数时,我可以编写这个函数 ex.runif() 谁来完成这项工作,但它比它慢数百倍正常的runif()。谁能指出更好的解决方案?
ex.runif <- function(n, excl, min, max) {
# ex.runif() excludes the specific value 'excl'
q <- excl
while (q == excl) {
q <- runif(n, min = min, max = max)
}
return(q)
}
set.seed(42)
ex.runif(1, .5, .25, .75) # exclude .5, interval [.25, .75]
# [1] 0.707403
library(microbenchmark)
microbenchmark(ex.runif(1, .5, .25, .75), runif(1, min = .25, max = .75))
# Unit: microseconds
# expr min lq mean median uq max neval cld
# ex.runif 692.439 704.685 721.51135 715.2735 722.9275 962.373 100 b
# runif 2.041 2.551 3.49044 2.8070 3.3170 21.176 100 a
【问题讨论】:
-
循环后返回
q -
这样做的动机是什么?在概率论中,很少有理由区分两个随机变量,它们的支持度相差一组测度为零。
-
@JohnColeman 我正在从模拟数据中以概率 pi 计算掩码估计量。 pi 被另一个具有概率 p1 的值覆盖(在模拟中随机绘制)。因此 p1
!=excl,否则这是不可能的。