簡體   English   中英

向 CRAN 提交 package 不接受 function 內的 set.seed 但不知道如何避免它

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

我正在向 CRAN 提交一個 package 以識別時間序列中的中斷,為此在 package 的某些功能中,我進行了蒙特卡羅模擬。 為了保證來自執行蒙特卡羅模擬的函數的相同輸入的相同結果,我在 function 中設置了一個種子。 CRAN 版主向我說:“請不要將種子設置為 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
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM