假设我有这个载体列表:
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
到目前为止我尝试过:
首先使用lapply
和length
函数获取最后一个元素索引,然后使用子集:
last <- unlist(lapply(mylist, length))
lapply(mylist,"[", last) # not working
然后我尝试将sapply
与lapply
一起使用。这是有效的,但我不确定这是否通常有效。必须有一个更好的基础R解决方案(没有循环!)。
mymatrix <- sapply(last, function(x) lapply(mylist, "[",x))
diag(mymatrix)
$a
[1] 3
$b
[1] 1
$c
[1] 5
答案 0 :(得分:1)
(将此作为简历,因为这里有很多贡献,值得总结一下)
如果您要在列表中应用某些功能,则应执行简单的lapply
,例如
lapply(mylist, max) # retrieving the maximum values
或者
lapply(mylist, tail, 1) # retrieving the last values (by @docendo)
如果您想同时操作两个向量,可以使用mapply
或Map
Map(`[`, mylist, lengths(mylist)) # A Map version of @docendos lapply suggestion
或根据您的最新要求
Map(`[`, mylist, 1:3)