我的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)