首页 > 解决方案 > R:重新列出非递归命名嵌套列表

问题描述

relist()当列表没有递归展平时,该函数(默认情况下)不会重新列出。例如

> my_list=list(a=list(aa=c(1,2),ab=2),b=list(ba=1,bb=2))
> flat=unlist(as.relistable(my_list),recursive=FALSE)
Warning message:
In unlist.relistable(x, recursive, use.names) :
  relist() requires recursively unlisted objects.

>relist(flat)
$a
$a$aa
$a$aa[[1]]
[1] 1 2

$a$aa[[2]]
[1] 2

$a$ab
$a$ab[[1]]
[1] 1

$b
$b$ba
$b$ba[[1]]
[1] 2

$b$bb
$b$bb[[1]]
NULL

我想出了一个部分答案并且似乎可以工作,但是有没有更好和完整的方法来做到这一点?

标签: rlistflatten

解决方案


使用您的非递归未列出列表,您可以再次制作unlist并将存储的骨架用于relist.

relist(unlist(flat), attr(flat,"skeleton"))
#$a
#$a$aa
#[1] 1 2
#
#$a$ab
#[1] 2
#
#
#$b
#$b$ba
#[1] 1
#
#$b$bb
#[1] 2
#
#
#attr(,"class")
#[1] "relistable" "list"      

推荐阅读