R: как уменьшить список () от replicate () для связывания матриц согласно элементу самого низкого уровня - PullRequest
1 голос
/ 05 апреля 2019

Я использовал 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)
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...