我有一个这样的嵌套列表:
nested_list <- list(a = c(1,2),
b = list(
c = c(3,4),
d = list(
e = c(5,6,7)
)))
Run Code Online (Sandbox Code Playgroud)
我想简化它,使它看起来像这样(只有一个级别,使用冒号分组的嵌套名称):
simplified_list <- list(a = c(1,2),
"b:c" = c(3,4),
"b:d:e" = c(5,6,7)
)
Run Code Online (Sandbox Code Playgroud)
最好的方法是什么?
这种方法具有很短的优点.它不使用任何包.它假定输入名称不包含尾随数字:
u <- unlist(nested_list)
res <- tapply(u, sub("\\d+$", "", names(u)), unname)
Run Code Online (Sandbox Code Playgroud)
赠送:
> res
$a
[1] 1 2
$b.c
[1] 3 4
$b.d.e
[1] 5 6 7
Run Code Online (Sandbox Code Playgroud)
如果重要的是名称由以下分隔:而不是.然后加上这个:
names(res) <- chartr(".", ":", names(res))
Run Code Online (Sandbox Code Playgroud)