sirve simulacion rnorm que para normal hipergeometrica funcion exponencial distribucion bernoulli r random

simulacion - set.seed r para que sirve



Imprima la semilla aleatoria actual para que pueda ingresarla con set.seed() más tarde (3)

Soy un novato R aquí.

Digamos que tengo la línea de código

set.seed(123456)

luego quiero obtener el valor 123456 para poder imprimirlo con fines de documentación y, si es necesario, volver a ingresar el valor en algún momento en el futuro. Entonces, ¿cómo consigo esa semilla?

Tenga en cuenta que puedo comentar la línea de código anterior, así que realmente no sabré qué es el valor inicial en 123456. Por lo tanto, necesito r para imprimir la ubicación del valor inicial actual como un solo entero, no como una lista de 626 enteros.


Aquí hay algo que debería funcionar bien en la práctica (pero no debería usarse para, por ejemplo, la criptografía):

new.seed <- as.integer(runif(1)*2e9) cat("Random seed: ", new.seed, "/n") set.seed(new.seed)

Realmente necesita configurar la semilla para que esto funcione, por lo que no es una respuesta a la pregunta original, pero puede ser lo que estaba buscando, ya que le permite tener una semilla aleatoria fácilmente especificada sin configurarla manualmente con un valor predeterminado entero.


Existe efectivamente una relación unidireccional entre la semilla utilizada en set.seed() y la información en .Random.seed ; ?Random.seed dice ?Random.seed y la respuesta de @ MattTenenbaum, la información en .Random.seed se puede guardar y restaurar. Aprecio el deseo de una función que derive una semilla de entero entero del estado actual de .Random.seed , pero en su ausencia, debe guardar y restaurar la información completa ... por ejemplo

set.seed(1001) save(".Random.seed",file="random_state_seed1001.RData") ## save current state runif(1) ## [1] 0.9856888 runif(1) ## [1] 0.4126285 runif(1) ## [1] 0.4295392 load("random_state_seed1001.RData") ## restore state just after set.seed() runif(1) ## [1] 0.9856888

Como señala @JoshuaUlrich, esto solo funciona / solo es seguro si no modifica el tipo de RNG (y el tipo de generador de desviación normal) entre guardar y restaurar ...

Una solución más completa:

save_rng <- function(savefile=tempfile()) { if (exists(".Random.seed")) { oldseed <- get(".Random.seed", .GlobalEnv) } else stop("don''t know how to save before set.seed() or r*** call") oldRNGkind <- RNGkind() save("oldseed","oldRNGkind",file=savefile) invisible(savefile) } restore_rng <- function(savefile) { load(savefile) do.call("RNGkind",as.list(oldRNGkind)) ## must be first! assign(".Random.seed", oldseed, .GlobalEnv) }

Pruébalo:

set.seed(101) RNGstore <- save_rng() ## save file name runif(1) ## [1] 0.3721984 runif(10) ## [1] 0.04382482 0.70968402 0.65769040 0.24985572 0.30005483 0.58486663 ## [7] 0.33346714 0.62201196 0.54582855 0.87979573 restore_rng(RNGstore) runif(1) ## [1] 0.3721984

Véase también: http://www.cookbook-r.com/Numbers/Saving_the_state_of_the_random_number_generator/


Una vez que haya llamado a set.seed , debería poder hacer referencia a .Random.seed (consulte http://stat.ethz.ch/R-manual/R-patched/library/base/html/Random.html para obtener más información ).

Un ejemplo simple:

set.seed(123) tmp <- .Random.seed > runif(10) [1] 0.2875775 0.7883051 0.4089769 0.8830174 0.9404673 0.0455565 0.5281055 0.8924190 0.5514350 0.4566147 .Random.seed <- tmp > runif(10) [1] 0.2875775 0.7883051 0.4089769 0.8830174 0.9404673 0.0455565 0.5281055 0.8924190 0.5514350 0.4566147