# R中的种子行为与rbinom（prob = 0.5）不稳定

` `set.seed(234908) x <- rbinom(n=1,size=60,prob=0.4) temp1 <- .Random.seed set.seed(234908) x <- rbinom(n=1,size=60,prob=0.3) temp2 <- .Random.seed any(temp1!=temp2) > [1] FALSE` `

` `set.seed(234908) x <- rbinom(n=1,size=60,prob=0.5) temp1 <- .Random.seed set.seed(234908) x <- rbinom(n=1,size=60,prob=0.3) temp2 <- .Random.seed any(temp1!=temp2) > [1] TRUE temp1==temp2 > [1] TRUE FALSE TRUE TRUE TRUE TRUE TRUE > [8] TRUE TRUE TRUE TRUE TRUE TRUE TRUE ...` `

` `set.seed(234908) MNAR <- c(0.5,0.3) x <- rbinom(n=1,size=60,prob=MNAR[1]) y <- rbinom(n=1,size=50,prob=MNAR[2]) temp1 <- .Random.seed set.seed(234908) MNAR <- c(0.1,0.3) x <- rbinom(n=1,size=60,prob=MNAR[1]) y <- rbinom(n=1,size=50,prob=MNAR[2]) temp2 <- .Random.seed any(temp1!=temp2) > [1] TRUE any(temp1!=temp2) > [1] TRUE FALSE TRUE TRUE TRUE TRUE TRUE > [8] TRUE TRUE TRUE TRUE TRUE TRUE TRUE` `

` `set.seed(234908) MNAR <- c(0.3,0.5) x <- rbinom(n=1,size=60,prob=MNAR[1]) y <- rbinom(n=1,size=50,prob=MNAR[2]) temp1 <- .Random.seed set.seed(234908) MNAR <- c(0.1,0.3) x <- rbinom(n=1,size=60,prob=MNAR[1]) y <- rbinom(n=1,size=50,prob=MNAR[2]) temp2 <- .Random.seed any(temp1!=temp2) > [1] FALSE` `

` `/*-------------------------- np = n*p >= 30 : ------------------- */` `

` `/*---------------------- np = n*p < 30 : ------------------------- */` `

` `# these end up in the same state rbinom(n=1,size=60,prob=0.4) # => np < 30 rbinom(n=1,size=60,prob=0.3) # => np < 30 # these don't rbinom(n=1,size=60,prob=0.5) # => np >= 30 rbinom(n=1,size=60,prob=0.3) # => np < 30 # these don't {rbinom(n=1,size=60,prob=0.5) # np >= 30 rbinom(n=1,size=50,prob=0.3)} # np < 30 {rbinom(n=1,size=60,prob=0.1) # np < 30 rbinom(n=1,size=50,prob=0.3)} # np < 30 # these do {rbinom(n=1,size=60,prob=0.3) # np < 30 rbinom(n=1,size=50,prob=0.5)} # np < 30 {rbinom(n=1,size=60,prob=0.1) # np < 30 rbinom(n=1,size=50,prob=0.3)} # np < 30` `

`rbinom`有三个参数： `n``size``prob` 。 你的期望是，对于调用`rbinom`之前的随机种子集合， `.Random.seed`将在给定的`n``size``prob` 任何值（或者任何有限的`size``prob`值）调用`rbinom`后是相同的。 你当然会意识到，不同的`n`值会有所不同。 `rbinom`并不保证或暗示。

` `seedtweak <- function() { if(floor(as.POSIXlt(Sys.time())\$sec * 10) %% 2) { runif(1) } invisible(NULL) }` `

` `rs <- replicate(10, { set.seed(123) seedtweak() .Random.seed }) all(apply(rs, 1, function(x) Reduce(`==`, x)))` `