首页 > 解决方案 > 重铸任何深度的嵌套列表

问题描述

假设这个简化的例子:

L <- list()

L$Foo <- list()
L$Foo$Bar <- list()
L$Foo$Bar$VAR <- TRUE

L$Lorem <- list()
L$Lorem$Ipsum <- list()
L$Lorem$Ipsum$Dolor <- list()
L$Lorem$Ipsum$Dolor$VAR <- TRUE

然后,我将使用reshape2::melt(L). 这将输出以下内容:

  value    L3    L2   L4    L1
1  TRUE   VAR   Bar <NA>   Foo
2  TRUE Dolor Ipsum  VAR Lorem

在对 value 列中的某些单元格进行一些操作之后,我希望将这个融化的列表重新转换为与嵌套列表结构完全相同的嵌套列表结构L——唯一的区别是我更新了一些value实例。

任何想法如何实现这一目标?请记住,嵌套列表可以有任何不同的深度。

标签: rlistreshape

解决方案


一个选项是relist,在我们unlist编辑之后L

tmp <- unlist(L)
# make small changes
tmp[] <- FALSE
relist(tmp, L)

结果

$Foo
$Foo$Bar
$Foo$Bar$VAR
[1] FALSE



$Lorem
$Lorem$Ipsum
$Lorem$Ipsum$Dolor
$Lorem$Ipsum$Dolor$VAR
[1] FALSE

L好像

$Foo
$Foo$Bar
$Foo$Bar$VAR
[1] TRUE



$Lorem
$Lorem$Ipsum
$Lorem$Ipsum$Dolor
$Lorem$Ipsum$Dolor$VAR
[1] TRUE

推荐阅读