R语言 如何获取列表中每个元素的最后一个子元素?

stszievb  于 2023-05-26  发布在  其他
关注(0)|答案(4)|浏览(244)

我试图得到列表中每个子元素的last元素的值。列表的元素是不同长度的向量,因此最后一个子元素的索引在列表的元素之间不是恒定的。
我已经搜索了SO,但只找到了那些希望获得的信息,for example, the second sub-element of every element。这对我没有帮助,因为列表中的元素的长度不恒定。
我只对不涉及使用for循环的解决方案感兴趣,因为我的列表长度> 100万。
示例数据:

x <- list(a = 1:5, b = 1:10, d = 9:11)

预期输出为列表:list(5, 10, 11)

nhn9ugyo

nhn9ugyo1#

我们可以使用lapplytail

x <- list(a = 1:5, b = 1:10, d = 9:11)
last_elems <- lapply(x, tail, n = 1L)

正如注解中所指出的,要获得一个数字向量而不是一个单元素列表,vapply是一个不错的选择:

last_elems <- vapply(x, tail, n = 1L, FUN.VALUE = numeric(1))
kq4fsx7k

kq4fsx7k2#

使用 purrr::map2

library(purrr)

x <- list(a = 1:5, b = 1:10, d = 9:11)
map2(x, lengths(x), pluck)
# $a
# [1] 5
# 
# $b
# [1] 10
# 
# $d
# [1] 11
jei2mxaa

jei2mxaa3#

你也可以使用purrr::map_chr沿着dplyr::last

map_chr(x, last)

这在处理表格数据时特别方便

perfData %>% mutate(benchmark = map_chr(str_split(benchmark_name, "[.]"), last))

在本例中,我们提取了最后一个.之后的名称部分。使用map_int的数字也是如此,依此类推请参见https://purrr.tidyverse.org/reference/map.html

dsekswqp

dsekswqp4#

data.table包中尝试last

> lapply(x, data.table::last)
$a
[1] 5

$b
[1] 10

$d
[1] 11

相关问题