中的R本地(不是全局)结籽(setting seed locally (not globally)

2019-07-18 04:33发布

我想设定中的R种子只能在本地(内部功能),但似乎r设置种子不仅在本地,而且在全球。 下面是我想要什么(不)做一个简单的例子。

myfunction <- function () {
  set.seed(2)
}

# now, whenever I run the two commands below I'll get the same answer
myfunction()
runif(1)

所以,我的问题是:为什么R SET的种子全球而不仅仅是我的函数里面? 和我如何可以使R键只设置种子我的函数内?

Answer 1:

这样的事情确实对我来说:

myfunction <- function () {
  old <- .Random.seed
  set.seed(2)
  res <- runif(1)
  .Random.seed <<- old
  res
}

或许更优雅:

myfunction <- function () {
  old <- .Random.seed
  on.exit( { .Random.seed <<- old } )
  set.seed(2)
  runif(1)
}

例如:

> myfunction()
[1] 0.1848823
> runif(1)
[1] 0.3472722
> myfunction()
[1] 0.1848823
> runif(1)
[1] 0.4887732


文章来源: setting seed locally (not globally) in R