studio hoverinfo ggplot change r random random-seed

hoverinfo - plotly title r



Resultados inconsistentes para f(g(x)) juntos o divididos (2)

Durante una investigación reciente sobre el establecimiento de semillas aleatorias dentro de las funciones, encontré una situación extraña. Considere las funciones f y g , cada una de las cuales establece la semilla aleatoria y luego realiza una operación aleatoria simple:

g <- function(size) { set.seed(1) ; runif(size) } f <- function(x) { set.seed(2) ; x*runif(length(x)) }

Como cada función establece la semilla aleatoria, esperaría que cada función siempre tenga el mismo valor de retorno dada la misma entrada. Esto significa que f(g(2)) debería devolver lo mismo que x <- g(2) ; f(x) x <- g(2) ; f(x) . Para mi sorpresa, este no es el caso:

f(g(2)) # [1] 0.1520975 0.3379658 x <- g(2) f(x) # [1] 0.04908784 0.26137017

¿Que esta pasando aqui?


El argumento x de su función f() solo se evalúa en el momento en que se usa realmente dentro de la función. Esto significa que set.seed(2) se evalúa antes de la ejecución de la función g() cuando intenta calcular f(g(2)) .

> f(g(2)) [1] 0.1520975 0.3379658

es básicamente equivalente a:

> set.seed(2) > set.seed(1) > result <- runif(2) > result*runif(length(result)) [1] 0.1520975 0.3379658


Este es un ejemplo del experimento R de doble rendija. Cuando se observa x, actúa como una partícula; cuando no se observa, actúa como una ola. Mirad

g <- function(size) { set.seed(1) ; runif(size) } f <- function(x) {set.seed(2) ; x*runif(length(x)) } f2 <- function(x) {print(x); set.seed(2) ; x*runif(length(x)) } f(g(2)) # [1] 0.1520975 0.3379658 x <- g(2) f(x) # [1] 0.04908784 0.26137017 f2(g(2)) # [1] 0.2655087 0.3721239 # [1] 0.04908784 0.26137017 x <- g(2) f2(x) # [1] 0.2655087 0.3721239 # [1] 0.04908784 0.26137017

Solo estoy josilbering you. print está forzando x . Puedes hacer eso explícitamente

f <- function(x) {force(x); set.seed(2) ; x*runif(length(x)) } x <- g(2) f(x) # [1] 0.04908784 0.26137017

Pero no esto

f(force(g(2))) # [1] 0.1520975 0.3379658