假设我有list
个向量(它们都不是空的;它们可能有不同的长度)。
如何从向量的末尾(例如)生成元素列表?
例如,如果我的列表包含3个元素1:10
,2:9
和c(3,5)
,那么输出列表应该是包含10
,9
的列表}和5
。
在更简单的情况下,所有向量的长度相同(例如5),我尝试首先使用data.frame
将列表设为as.data.frame
。问题是我的列表是巨大(大约100万个向量),而as.data.frame
需要很长时间。我考虑过优化,可能使用this answer,但无论如何我认为它会导致错误的数据结构 - 而不是每列有5个列,每行100万个值,它会创建一个包含一百万列的data.frame
。 / p>
所以我应该看看其他地方。有什么想法吗?
答案 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