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

时间:2016-01-19 11:02:47

标签: r list vector subset

假设我有这个载体列表:

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

1 个答案:

答案 0 :(得分:1)

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

如果您要在列表中应用某些功能,则应执行简单的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)