Я использовал replicate()
для создания списка n_iter
элементов.Ниже приведен минимальный рабочий пример со взломанным кодом.Я стремлюсь к тому же результату более эффективно, возможно, с Reduce()
и do.call('rbind', list)
.
. Я начну со списка n_iter
элементов.Каждый элемент содержит два элемента, каждый из которых содержит два дополнительных элемента (которые содержат векторы).Это подразумевает четыре вектора «листьев» для каждой итерации.
В качестве вывода я хотел бы создать список из четырех элементов, каждый элемент которого содержит матрицу из n_iter
строк, соответствующих всем итерациям одной изчетыре «листовых» вектора (т. е. каждая строка представляет собой «листовой» вектор, а одна матрица представляет все итерации этого вектора).
# Create data
data <- as.data.frame(matrix(rnorm(6000, 0, 1), nrow = 1000, ncol = 6))
names(data) <- c("outcome_1", "outcome_2", "predictor_1a",
"predictor_1b", "predictor_2a", "predictor_2b")
# Specify number of iterations.
n_iter <- 100
# Run bootstrap with 10,000 replicates.
replicates <- replicate(n_iter, {
samp <- data[sample(nrow(data), replace = TRUE), ]
res <- lapply(list(c('predictor_1a', 'predictor_1b'), c('predictor_2a', 'predictor_2b')), function (t) {
lapply(c('outcome_1', 'outcome_2'), function (y) {
form <- as.formula(paste(y, paste(t, collapse = " + "), sep = " ~ "))
res <- lm(form, data = data)$coef
})
})
}, simplify = FALSE)
# Store results for each of the four comparisons in a list object.
repl_version <- list(list(), list(), list(), list())
for (i in 1:n_iter) {
repl_version[[1]][[i]] <- replicates[[i]][[1]][[1]]
repl_version[[2]][[i]] <- replicates[[i]][[1]][[2]]
repl_version[[3]][[i]] <- replicates[[i]][[2]][[1]]
repl_version[[4]][[i]] <- replicates[[i]][[2]][[2]]
}
# Produce SE estimates for each comparison.
repl_version <- lapply(repl_version, function (version) {
version_matrix <- do.call('rbind', version)
})