0
以下两段代码做相同的工作,但给出不同的结果。它需要一个/两分钟来运行代码:两个编码用于相同的目的,但给出不同的结果
# chunk 1:
n <- 10000000
set.seed(1)
a <- rbinom(n, 1, .5)
b1 <- (a==0) * rexp(n, 1/182.5)
b2 <- (a==1) * rexp(n, 1/365)
e <- (a==1) * rbinom(n, 1, .5)
b3 <- (e==1) * rexp(n, 1/365)
g <- (1-a)*b1 + a*(b2+b3)
p <- length(g[g>150])/length(g)
p
# chunk 2:
n <- 10000000
set.seed(1)
a <- rbinom(n, 1, .5)
b1 <- rexp(n, 1/182.5)
b2 <- rexp(n, 1/365)
e <- rbinom(n, 1, .5)
b3 <- rexp(n, 1/365)
g <- (1-a)*b1 + a*(b2+b3)
p <- length(g[g>150])/length(g)
p
这2块相同,因为,a
等于一,部分(1-a)*b1
在g
将消失,不要紧b1
是否等于零或任何其他值。
同样,如果没有a
为1,g
中的部分a*(b2+b3)
将会消失。因此,b2
的元素是零还是另一个值(如果a
的对应元素是零)并不重要。
但是为什么2块的结果不同?
set.seed()怎么样?如果生成随机分布,除非定义种子,否则它应该是不同的。 –
@AleksandrVoitov由于'n'足够大,它会给出2位小数位的相似结果(总是我找到了)。我仍然编辑过。谢谢。 –
@Leaf恕我直言1块比块2计算另一个'b1'。取决于'a'的元素的值。对于'a [i]'== 0,计算相同的'b1 [i]',但对于'a [i]'== 1,第一个块计算'b1 [i]'== 0。 – jogo