【发布时间】:2022-01-08 02:32:55
【问题描述】:
我最近向 CRAN 提交了一个包,它通过了所有自动检查,但未能通过手动检查。错误之一如下:
请不要将种子设置为函数中的特定数字。
请不要修改 .GlobalEnv。 CRAN 政策不允许这样做。
我相信这些 cmets 所指的代码行如下
if(simul == TRUE){
set.seed(42)
}
w <- matrix(data = rbinom(n = p, size = 1, prob = 0.5), ncol = 1)
beta <- w*beta-(1-w)*beta
s <- round((1-sparsity)*p)
toReplace <- sample(p, size = s)
beta <- replace(beta, list = toReplace, values = 0)
# Generate the random p-columned matrix of indicator series.
X <- matrix(data = rnorm ((n_l*m) * p, mean = mean_X, sd = sd_X), ncol = p, nrow = n_l*m)
if(simul == TRUE){
rm(.Random.seed, envir = globalenv())
}
本质上,我允许该函数包含一个模拟选项“simul”,这样当设置为“TRUE”时,矩阵“X”和系数向量“beta”保持固定。我删除了该段末尾的种子(最后几行),因为其余代码包含应在每次模拟迭代时更改的变量。但是,正如 CRAN 的反馈中所述,这是不允许的。有什么替代方法可以解决这个问题?当“simul”为“TRUE”时,我无法设置固定向量“beta”或矩阵“X”,因为这些维度是函数的输入,因此会根据调查人员的偏好而有所不同。
【问题讨论】:
-
你应该让用户设置种子,这就是 CRAN 不喜欢这种做法的原因。
-
如果你把这个种子作为你的函数的一个参数,这样函数的用户可以随意设置任何整数呢?
-
同上,只是让用户设置种子,这样每次都能得到相同的结果。至于改变全球环境,为什么要这么做?无论如何,如果您让
seed作为参数传递,您就不需要“清理”环境。