无法理解为什么随机数算法给出不同的结果

时间:2015-06-12 14:03:35

标签: r random

我试图理解为什么以下2个代码片段导致不同的输出,我希望有人可以启发我。第二个版本稍微快一点 - 这是我的动机,因为这一切都处于循环中,但我需要知道它是否相同,如果不是,为什么呢?

    things <- 100000
    n.events <- 3
    probs <- rep(0.05, n.events)

    # Method 1
    set.seed(1)
    events1 <- matrix(n.events, nrow=things)
    events1 <- sapply(probs, function(probs) rbinom(things,1,probs))

    # Method 2
    set.seed(1)
    events2 <- matrix( rbinom(things*n.events, 1, probs), ncol=n.events,    byrow=TRUE)

    > identical(events1, events2)
    [1] FALSE

1 个答案:

答案 0 :(得分:3)

要获得相同的结果,您需要为第二个选项添加byrow=FALSE而不是byrow=TRUE

您计算随机矩阵的第一种方式,它计算rbinom(things,1,probs) length(probs)次,每次获得things个长矢量。

要使用第二种方式获得完全相同的矩阵,这将计算length(probs) * things长向量,您需要&#34;组织&#34;它在length(probs)长度为things的向量中。

(无论哪种方式,种子是&#34;处理&#34;完全相同&#34;在&#34之间&#34;计算所以得到的数字是相同的)

修改

如果要为向量probs使用不同的值,则需要以某种方式计算events2,以便在相同的&#34;顺序&#34;而不是events1所以首先是矢量probs的第一个值,直到达到所需的长度,然后是第二个值等,然后以与以前相同的方式组织矩阵的列,因此使用{{1 }}

<强> 实施例

byrow=FALSE