簡體   English   中英

從列表中向量中的最后一個元素創建一個列表

[英]Create a list from the last elements in vectors in a list

假設我有一個向量list (它們都不為空;它們的長度可能不同)。

如何從向量的兩端(例如)生成元素列表?

例如,如果我的列表中包含3個元素, 1:102:9c(3,5)則輸出列表應該包含列表1095

在更簡單的情況下,所有向量的長度都相同(例如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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM