#r
#r
Вопрос:
N <- 10000 ; maxbound = 20
one_side_normal <- function(N) {
f <- numeric(N);
for (i in 1:N) {
X = rexp(1,rate=1);
uniform = runif(1);
while (uniform>exp((-X^2) X) ){
X = rexp(1,rate=1);
uniform=runif(1);
}
f[i] <- X
}
return(f)
}
Приведенный выше код представляет собой выборку из одностороннего нормального распределения (sample = 10000) с использованием метода принятия-отклонения. Как бы я зациклил этот код, чтобы выполнить 4 отдельных раза для выборок 10,100,1000 и 10000?
Ответ №1:
Мы можем использовать lapply
для перебора N
значений и применения функции. Поскольку существует только один аргумент, нам не нужна никакая лямбда-функция. Он вернет list
lst1 <- lapply(c(10, 100, 1000, 10000), one_side_normal)
Другой вариант — классический for
цикл. Чтобы сохранить выходные данные, мы можем создать a NULL
list
фиксированной длины, т.е. Длину вектора значений ‘N’. Затем выполните цикл по последовательности ‘N’, примените функцию и назначьте ( <-
) вывод соответствующему list
элементу с этим индексом
nvec <- c(10, 100, 1000, 10000)
lst1 <- vector('list', length(nvec))
for(i in seq_along(nvec)) lst1[[i]] <- one_side_normal(nvec[[i]])