我试图理解为什么以下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
答案 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