gpt4 book ai didi

r - f(g(x))在一起或分开时的结果不一致

转载 作者:行者123 更新时间:2023-12-03 08:22:10 25 4
gpt4 key购买 nike

a recent investigation设置函数内的随机种子期间,我遇到了一种奇怪的情况。考虑函数fg,每个函数设置随机种子,然后执行简单的随机操作:

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

因为每个函数都设置随机种子,所以我希望每个函数在给定相同输入的情况下始终具有相同的返回值。这意味着 f(g(2))应该返回与 x <- g(2) ; f(x)相同的东西。令我惊讶的是,情况并非如此:
f(g(2))
# [1] 0.1520975 0.3379658

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

这里发生了什么?

最佳答案

这是双缝R实验的一个示例。当观察到x时,它充当粒子。当未被观察到时,它就像是波浪。看哪

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

我只是在开 Jest 。 print强制 x。您可以明确地做到这一点
f <- function(x) {force(x); set.seed(2) ; x*runif(length(x)) }
x <- g(2)
f(x)
# [1] 0.04908784 0.26137017

但这不是
f(force(g(2)))
# [1] 0.1520975 0.3379658

关于r - f(g(x))在一起或分开时的结果不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31084234/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com