在他们使用的概率分布方面?我知道 runif 给出小数而 sample 给出整数,但我感兴趣的是 sample 是否也使用“均匀概率分布”?
最佳答案
考虑以下代码和输出:
> set.seed(1)
> round(runif(10,1,100))
[1] 27 38 58 91 21 90 95 66 63 7
> set.seed(1)
> sample(1:100, 10, replace=TRUE)
[1] 27 38 58 91 21 90 95 67 63 7
这强烈表明当被要求做同样的事情时,这两个函数给出了几乎相同的输出(尽管有趣的是
round
给出了相同的输出,而不是 floor
或 ceiling
)。主要区别在于默认值,如果您不更改这些默认值,那么两者都会给出称为统一的东西(尽管 sample
将被视为离散统一,并且默认情况下无需替换)。编辑
更正确的比较是:
> ceiling(runif(10,0,100))
[1] 27 38 58 91 21 90 95 67 63 7
而不是使用
round
.我们甚至可以更上一层楼:
> set.seed(1)
> tmp1 <- sample(1:100, 1000, replace=TRUE)
> set.seed(1)
> tmp2 <- ceiling(runif(1000,0,100))
> all.equal(tmp1,tmp2)
[1] TRUE
当然如果
probs
论据 sample
使用(并非所有值都相等),那么它将不再是统一的。
关于r - R中runif和sample的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26978281/