R - 如何从列表中的元素创建新列表?

时间:2016-05-11 18:47:12

标签: r list loops lapply sapply

假设我有一个列表preds,其中包含基于唯一模型的3组不同的预测。

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.

如果不清楚,请告诉我,我感谢您的帮助!

2 个答案:

答案 0 :(得分:4)

我们需要使用[

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

答案 1 :(得分:1)

这是另一种方法:

~/Content/kendo/css

借用akrun的支票代码:

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)))