ram*_*men 9 r names nested-lists
我有一个嵌套列表。该列表的每个级别均已命名(如提供的虚拟示例中所示)。我想从初始列表的第二级中提取名称(唯一),这样我就可以在一些进一步的操作中使用它们。
我知道如何分两步完成,但我想知道是否有更有效/优雅的解决方案。我也想知道正则表达式方法是否会更快(我是正则表达式新手)。
这是一个虚拟列表:
x <- list(one = list(one_1 = list(seq = 1:9, start = 1, end = 5),
one_2 = list(seq = 2:11, start = 2, end = 6), one_3 = list(
seq = 3:12, start = 3, end = 7)), two = list(two_1 = list(
seq = 1:13, start = 8, end = 222), two_2 = list(seq = 1:14,
start = 13, end = 54)))
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
allnames <- names(rapply(x, function(x) head(x, 1)))
desirednames <- unique(sapply(strsplit(allnames, ".", fixed=TRUE), "[", 2))
Run Code Online (Sandbox Code Playgroud)
一个可能的解决方案,基于purrr::map_depth:
library(tidyverse)
map_depth(x, 1, names) %>% unlist(use.names = F)
#> [1] "one_1" "one_2" "one_3" "two_1" "two_2"
Run Code Online (Sandbox Code Playgroud)
R中第二级的解决方案base:
unlist(lapply(names(x), function(n) names(x[[n]])))
[1] "one_1" "one_2" "one_3" "two_1" "two_2"
Run Code Online (Sandbox Code Playgroud)