子集列表中的不同矢量元素
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
到目前为止我尝试过的:
首先使用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
(将其作为简历,因为这里有很多贡献,值得总结)
如果您有一些功能要应用到您的列表中,一个简单的 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)
假设我有这个向量列表:
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
(将其作为简历,因为这里有很多贡献,值得总结)
如果您有一些功能要应用到您的列表中,一个简单的 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)