R中runif和样本之间的区别?

Kus*_*sal 5 r random-sample

在他们使用的概率分布方面?我知道runif给出了小数,而样本给出了整数,但我感兴趣的是样本是否也使用"均匀概率分布"?

Gre*_*now 11

请考虑以下代码和输出:

> 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
Run Code Online (Sandbox Code Playgroud)

这强烈暗示当被要求做同样的事情时,2个函数给出几乎相同的输出(尽管有趣的是round它提供相同的输出而不是floorceiling).主要区别在于默认值,如果你不改变那些默认值,那么两者都会给出一个称为统一的东西(虽然它sample被认为是一个离散的统一,默认情况下没有替换).

编辑

更正确的比较是:

> ceiling(runif(10,0,100))
 [1] 27 38 58 91 21 90 95 67 63  7
Run Code Online (Sandbox Code Playgroud)

而不是使用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
Run Code Online (Sandbox Code Playgroud)

当然,如果使用probs参数to sample(并非所有值都相等),那么它将不再是统一的.


Rob*_*ski 7

sample 来自固定输入集的样本,如果长度为1的输入作为第一个参数传递,则返回整数输出.

另一方面,runif实际值范围返回样本.

 > sample(c(1,2,3), 1)
 [1] 2
 > runif(1, 1, 3)
 [1] 1.448551
Run Code Online (Sandbox Code Playgroud)