子集列表中的不同矢量元素

Subset different vector elements within a list

假设我有这个向量列表:

mylist <- list(a=1:3,b=4:1,c=1:5)
mylist
$a
[1] 1 2 3
$b
[1] 4 3 2 1
$c
[1] 1 2 3 4 5

我想像这样获取每个向量的最后一个或最大元素的最后一个元素:

$a
[1] 3
$b
[1] 1
$c
[1] 5

到目前为止我尝试过的:

首先使用lapplylength函数得到最后一个元素索引然后子集:

last <- unlist(lapply(mylist, length))
lapply(mylist,"[", last) # not working

然后我尝试将 sapplylapply 一起使用。这是有效的,但我不确定这是否普遍有效。必须有更好的基础 R 解决方案(没有循环!)。

mymatrix <- sapply(last, function(x) lapply(mylist, "[",x))
diag(mymatrix)
$a
[1] 3
$b
[1] 1
$c
[1] 5

(将其作为简历,因为这里有很多贡献,值得总结)

如果您有一些功能要应用到您的列表中,一个简单的 lapply 应该可以,例如

lapply(mylist, max) # retrieving the maximum values

lapply(mylist, tail, 1) # retrieving the last values (by @docendo) 

如果你想同时对两个向量进行操作,你可以使用mapplyMap

Map(`[`, mylist, lengths(mylist)) # A Map version of @docendos lapply suggestion

或根据您的最新请求

Map(`[`, mylist, 1:3)