# note: `sapply()` might be better, depending on the return value of `myfunction()`
lapply(1:10, function(seed){
set.seed(seed)
myfunction(data)
}
您也可以单独定义函数,例如:
# `...` is for passing (named) params other than `data` to `myfunction()`
myfunction2 <- function(data, seed, ...){
set.seed(seed)
myfunction(data, ...)
}
# same thing as first approach
lapply(1:10, myfunction2, data=data)
# wrap `myfunction()` to set seed before each call, passing params in `...`
myfunction_withseed <- function(...){
set.seed(6933)
myfunction(...)
}
# use `myfunction_withseed()` just as you would `myfunction()`
replicate(10, myfunction_withseed(data=data))
3条答案
按热度按时间uqcuzwp81#
在调用
replicate
之前使用set.seed()
。值得注意的是link。
特别是:
我们怎么强调都不为过:不要经常播种。要了解为什么这是一个如此糟糕的想法,请考虑限制情况:设置种子,绘制一个伪随机数,重置种子,再次绘制,如此继续。你得到的伪随机数只不过是你在数学函数中运行的种子。您获得的结果将不会通过随机,除非您选择的种子通过随机。如果你已经有了这样的数字,为什么还要费心去使用伪随机数生成器呢?
62o28rlo2#
如果你想在每次迭代中控制种子,同时保持
data
参数不变,最好使用lapply()
或sapply()
而不是replicate()
。例如,你可以为lapply()
提供一个种子向量,并定义一个内联函数将data
绑定到myfunction()
,如下所示:您也可以单独定义函数,例如:
但是,如果出于某种原因,你想在每次复制时生成相同的值,你可以将
myfunction()
Package 在一个修复种子的外部函数中,然后使用replicate()
重复调用该函数:或者你也可以用原始的
myfunction()
来做,例如:gt0wga4j3#
如果你想为每个复制使用不同的特定种子,你可以这样做:
如果你想为每一个相同的种子,你可以跳过计数;如果你希望整个序列是可重复的,但不想为每个重复选择种子,只需在
replicate()
调用之外使用set.seed
。