将包提交给 CRAN 不接受函数内部的 set.seed 但不知道如何避免它

Submitting a package to CRAN does not accept set.seed inside a function but do not know how to avoid it

我正在向 CRAN 提交一个包,用于识别时间序列中的中断,为此我在包的某些功能中进行了蒙特卡洛模拟。为了保证执行 Montecarlo 模拟的函数的相同输入得到相同的结果,我在函数中设置了一个种子。 CRAN 版主高我:"Please do not set a seed to a specific number within a function."

问题是如果没有设置种子,如何使用相同的输入获得相同的结果。这是一个理解问题的例子,其中 function2 在里面设置了一个种子,结果总是相等比较 max2max4,而不是 funtion1 做同样的事情但是未设置种子,结果各不相同。

x <- c(1:100)

#Function without set.seed
function1 <- function(x,simulations = 100){

  mn <- mean(x)
  sd <- sd(x)
  max_vect <- vector(mode = 'double',length = simulations)
  for(i in 1:simulations){
    x_aux <- rnorm(n = length(x),mean = mn,sd = sd)

    max_vect[i] <- max(x_aux)

  }

  return(mean(max_vect))
}

#Function that set.seed
function2 <- function(x,simulations = 100){

  mn <- mean(x)
  sd <- sd(x)
  max_vect <- vector(mode = 'double',length = simulations)
  set.seed(1234)
  for(i in 1:simulations){
    x_aux <- rnorm(n = length(x),mean = mn,sd = sd)

    max_vect[i] <- max(x_aux)

  }

  return(mean(max_vect))
}

max1 <- function1(x)
max2 <- function2(x)

max3 <- function1(x)
max4 <- function2(x)

同意评论。这样做

myFunction <-function (x, y,z, seed = NULL) {
if (length(seed) ) set.seed(seed)
# the function guts
}