R set.seed()的范围

lol*_*ity 10 random r seed

我的R脚本调用包含set.seed()的子函数.set.seed()的范围是什么?它会影响调用它的主程序吗?

更具体地说

# main program
callsubfun()

... some statement ...

sample.int(100,20)



# sub function
callsubfun <- function(x,y,...){
   set.seed(100)
   ... do the work ...
   return(something)
}
Run Code Online (Sandbox Code Playgroud)

Mat*_*rde 11

set.seed确实是全球性的.但请注意以下示例?set.seed:

## If there is no seed, a "random" new one is created:
rm(.Random.seed); runif(1); .Random.seed[1:6]
Run Code Online (Sandbox Code Playgroud)

这意味着您可以rm(.Random.seed, envir=.GlobalEnv)在函数结束时调用,也可以在调用函数后将函数的其余部分与调用函数分离set.seed.

要查看此操作,请在两个不同的R会话中运行以下代码.两个会话的输出应该相同.然后在两个新的R会话中重新运行代码,并rm取消注释该行.您将看到两个新会话中的输出现在不同,表示set.seed函数中的调用未将可重复性传递给主程序.

subfun <- function() {
    set.seed(100)
    rnorm(1)
    #rm(.Random.seed, envir=.GlobalEnv)
}

subfun()
#[1] -0.5022

rnorm(1)
# [1] 0.1315
Run Code Online (Sandbox Code Playgroud)