[英]Create a list from the last elements in vectors in a list
假設我有一個向量list
(它們都不為空;它們的長度可能不同)。
如何從向量的兩端(例如)生成元素列表?
例如,如果我的列表中包含3個元素, 1:10
, 2:9
和c(3,5)
則輸出列表應該包含列表10
, 9
和5
。
在更簡單的情況下,所有向量的長度都相同(例如5),我嘗試首先使用as.data.frame
將列表data.frame
。 問題是我的列表很大 (大約一百萬個向量),並且as.data.frame
需要很as.data.frame
。 我考慮過優化,也許使用了這個答案 ,但是無論如何,我認為它會導致錯誤的數據結構-而不是創建5個列,每個列具有一百萬個值,而是創建一個具有一百萬列的data.frame
。
所以我可能應該去別的地方看看。 有任何想法嗎?
如果x
是原子向量的列表,則應用:
sapply(x, function(elem) elem[length(elem)])
使用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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.