Если вы хотите контролировать начальное число на каждой итерации, сохраняя постоянную аргумента data
, лучше использовать lapply()
или sapply()
, а не replicate()
. Например, вы можете указать вектор семян для lapply()
и определить встроенную функцию, которая связывает data
с myfunction()
, например:
# 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)
myfunction2(data, ...)
}
# same thing as first approach
lapply(1:10, myfunction2, data=data)
Но если по какой-либо причине вы хотите генерировать одинаковые значения при каждой репликации, вы можете обернуть myfunction()
во внешнюю функцию, которая фиксирует начальное значение, а затем использовать replicate()
для многократного вызова этой функции:
# 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))
Или вы можете сделать это inline с оригинальным myfunction()
, e, g,:
replicate(10, {set.seed(6933); myfunction(data)})