[英]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
在里面設置了一個種子,結果總是相等,比較max2
和max4
,而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.