2016-05-11 3 views
1

Скажем, у меня есть список, preds, который содержит 3 разных набора прогнозов на основе уникальных моделей.R - Как создать новый список из элементов в списке?

set.seed(206) 
preds <- list(rnorm(1:100), rnorm(1:100), rnorm(1:100)) 

У меня возникли проблемы с повторением списка и созданием нового списка. Я хочу список новых векторов, которые состоят из соответствующего индекса в других векторах. Так, например, я могу получить первый элемент каждого вектор из списка, используя sapply() так:

sapply(preds, "[[", 1) 

, который работает хорошо, но я не могу понять, как перебрать каждый элемент в каждом векторе, чтобы построить новый список. Я хочу что-то вроде этого (не работает):

sapply(preds, "[[", 1:100) 

Использование выше семян и preds списка, мой желаемый результат будет что-то вроде:

first_element <- sapply(preds, "[[", 1) 
second_element <- sapply(preds, "[[", 2) 
third_element <- sapply(preds, "[[", 3) 
desired_result <- rbind(first_element, second_element, third_element) 

Но для всех элементов в списке, который в этом примере равен 100.

Пожалуйста, дайте мне знать, если это не ясно, и я ценю любую помощь!

ответ

4

Мы должны использовать [

res <- sapply(preds, `[`, 1:3) 
all.equal(res, desired_result, check.attributes=FALSE) 
#[1] TRUE 
1

Вот альтернативный подход:

nth_element <- function(dat, n){ 

    res <- sapply(dat, "[[", n) 

    res 

} 

res2 <- do.call(rbind, lapply(c(1:3), function(x) nth_element(dat = preds, n = x))) 

код проверки Заимствование akrun в:

all.equal(res2, desired_result, check.attributes=FALSE) 
+0

Очень приятно, это где мой ум был первоначально собирался , но я не совсем туда попал. Я имел в основном идентичный код, но пытался использовать цикл for() вместо создания пользовательской функции. Я ценю дополнительное решение. –

Смежные вопросы