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

问题描述 投票:0回答:1

我正在向CRAN提交一个程序包,该程序包确定时间序列中的中断,为此,我在Montecarlo仿真中对该程序包的某些功能进行了识别。为了保证从执行蒙特卡洛模拟的函数中输入的相同结果相同,我在函数内部设置了一个种子。 CRAN主持人告诉我:“请不要在函数中将种子设置为特定的数字。”

问题是,如果未设置种子,如何用相同的输入获得相同的结果。这是一个了解问题的示例,其中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)

r montecarlo cran random-seed
1个回答
0
投票

同意评论。这样做

myFunction <-function (x, y,z, seed = NULL) {
if (length(seed) ) set.seed(seed)
# the function guts
}
© www.soinside.com 2019 - 2024. All rights reserved.