在嵌套列表中,如何将树节点(通过名称匹配)向上移动一级?

时间:2019-02-19 16:07:42

标签: r list

简介

比方说,我有一个列表列表...。现在,我知道这棵树中的某些元素碰巧只是一个元素的列表。假设我也知道这些元素的名称。

问题

问题:如何遍历树并取消嵌套(剥离一层)这些元素?

我正在寻找一个带有两个参数的函数: 1.输入清单 2.剥离的元素名称。

示例

在下面的示例中,我具有该列表/树input_list。现在,我想将元素'x'下的所有元素的内容向上移动一层。

因此,我希望丢弃列表x = [9:0x560f96c34f38]x = [14:0x560f96c34de8],但将其内容上移一层,在这种情况下,列表yt应该成为直接子级gh的节点。

desired_list说明了期望的结果。

注意:我使用了lobstr包来显示树的结构,但我想可能会有更多在视觉上更具吸引力的替代方案……请随意提出。

library(lobstr)

input_list <- list(a = list(b = 1:2, c = 'tricky', d = list(e = 'business', f = 'what?'), g = list(x = list(y = 'aassd')), w = list(z = 'foo')), h = list(x = list(t = 'asd'), s = list(a = 'bar')))

desired_list <- list(a = list(b = 1:2, c = 'tricky', d = list(e = 'business', f = 'what?'), g = list(y = 'aassd'), w = list(z = 'foo')), h = list(t = 'asd', s = list(a = 'bar')))

lobstr::ref(input_list)
#> █ [1:0x560f96c24af8] <list> 
#> ├─a = █ [2:0x560f96c0bb88] <list> 
#> │     ├─b = [3:0x560f960f4ea0] <int> 
#> │     ├─c = [4:0x560f95851ad0] <chr> 
#> │     ├─d = █ [5:0x560f96c24bf8] <list> 
#> │     │     ├─e = [6:0x560f95851a60] <chr> 
#> │     │     └─f = [7:0x560f95851a28] <chr> 
#> │     ├─g = █ [8:0x560f96c34ec8] <list> 
#> │     │     └─x = █ [9:0x560f96c34f38] <list> 
#> │     │           └─y = [10:0x560f95851980] <chr> 
#> │     └─w = █ [11:0x560f96c34e58] <list> 
#> │           └─z = [12:0x560f958518d8] <chr> 
#> └─h = █ [13:0x560f96c24b78] <list> 
#>       ├─x = █ [14:0x560f96c34de8] <list> 
#>       │     └─t = [15:0x560f95851830] <chr> 
#>       └─s = █ [16:0x560f96c34d78] <list> 
#>             └─a = [17:0x560f95878840] <chr>
lobstr::ref(desired_list)
#> █ [1:0x560f95079a28] <list> 
#> ├─a = █ [2:0x560f9465d288] <list> 
#> │     ├─b = [3:0x560f948ae058] <int> 
#> │     ├─c = [4:0x560f958798b8] <chr> 
#> │     ├─d = █ [5:0x560f95078928] <list> 
#> │     │     ├─e = [6:0x560f95879880] <chr> 
#> │     │     └─f = [7:0x560f95879848] <chr> 
#> │     ├─g = █ [8:0x560f94493d58] <list> 
#> │     │     └─y = [9:0x560f95879810] <chr> 
#> │     └─w = █ [10:0x560f94493dc8] <list> 
#> │           └─z = [11:0x560f958797d8] <chr> 
#> └─h = █ [12:0x560f95078de8] <list> 
#>       ├─t = [13:0x560f958797a0] <chr> 
#>       └─s = █ [14:0x560f94493ea8] <list> 
#>             └─a = [15:0x560f95879768] <chr>

0 个答案:

没有答案