比方说,我有一个列表列表...。现在,我知道这棵树中的某些元素碰巧只是一个元素的列表。假设我也知道这些元素的名称。
问题:如何遍历树并取消嵌套(剥离一层)这些元素?
我正在寻找一个带有两个参数的函数: 1.输入清单 2.剥离的元素名称。
在下面的示例中,我具有该列表/树input_list
。现在,我想将元素'x'
下的所有元素的内容向上移动一层。
因此,我希望丢弃列表x = [9:0x560f96c34f38]
和x = [14:0x560f96c34de8]
,但将其内容上移一层,在这种情况下,列表y
和t
应该成为直接子级g
和h
的节点。
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>