从列表中向量的最后元素创建列表

时间:2014-04-29 19:31:23

标签: r list vector dataframe

假设我有list个向量(它们都不是空的;它们可能有不同的长度)。

如何从向量的末尾(例如)生成元素列表?

例如,如果我的列表包含3个元素1:102:9c(3,5),那么输出列表应该是包含109的列表}和5

在更简单的情况下,所有向量的长度相同(例如5),我尝试首先使用data.frame将列表设为as.data.frame。问题是我的列表是巨大(大约100万个向量),而as.data.frame需要很长时间。我考虑过优化,可能使用this answer,但无论如何我认为它会导致错误的数据结构 - 而不是每列有5个列,每行100万个值,它会创建一个包含一百万列的data.frame。 / p>

所以我应该看看其他地方。有什么想法吗?

2 个答案:

答案 0 :(得分:3)

如果x是原子矢量列表,请应用:

 sapply(x, function(elem) elem[length(elem)])

答案 1 :(得分:3)

使用tail

> sapply(list(1:10,2:9,c(3,5)),tail,1)
[1] 10  9  5

@Bach对速度是正确的。虽然tail简洁,但速度很慢:

set.seed(1)
a <- list()
for(i in 1:1e3)
    a[[i]] <- sample(1:100, sample(1:100), TRUE)

library("microbenchmark")
microbenchmark(sapply(a,tail,1), sapply(a, function(elem) elem[length(elem)]))
# Unit: milliseconds
#                                          expr       min        lq    median        uq       max neval
#                            sapply(a, tail, 1) 22.998933 24.790584 26.103241 27.797130 79.489209   100
#  sapply(a, function(elem) elem[length(elem)])  1.546477  1.787224  1.951572  2.137856  6.106236   100