提问人:Lev 提问时间:4/3/2023 最后编辑:Lev 更新时间:4/3/2023 访问量:65
从嵌套列表动态构建路径
Built a path dynamically from a nested List
问:
拥有此嵌套列表:
myList<-list()
myList[[length(myList)+1]]<-list(text="Grandfather01",tabName='tabnameGrandfather01')
myList[[length(myList)+1]]<-list(text="Grandfather02",
list(text="Father02_01"
,list(text='Child02_01_01',tabName='tabNameChild02_01_01')
,list(text='Child02_01_02',tabName='tabNameChild02_01_02')
)
)
myList[[length(myList)+1]]<-list(text="Grandfather03",
list(text='Father03_01',tabName='tabNameFather03_01')
)
myList[[length(myList)+1]]<-list(text="Grandfather04"
,list(text="Father04_01"
,list(text='Child04_01_01'
,list(text='SuperChild04_01_01_01',tabName='tabNameSuperChild04_01_01_01')
,list(text='SuperChild04_01_01_02',tabName='tabNameSuperChild04_01_01_02')
)
)
,list(text='Father05_01',tabName='tabNameFather05_01')
)
我需要建立一个路径列表,例如:
第一个元素包含:
/tabnameGrandfather01
第二个元素包含:
Grandfather02/Father02_01/tabNameChild02_01_01
Grandfather02/Father02_01/tabNameChild02_01_02
第三个元素包含:
Grandfather03/tabNameFather03_01
最后一个包含:
Grandfather04/Father04_01/Child04_01_01/tabNameSuperChild04_01_01_01
Grandfather04/Father04_01/Child04_01_01/tabNameSuperChild04_01_01_02
Grandfather04/tabNameFather05_01
任何使用递归函数的想法?
答:
2赞
Mikael Jagan
4/3/2023
#1
您可以尝试以下递归函数:
collapse <- function(x, root = NULL) {
path <-
if (length(x) == 2L && identical(names(x), c("text", "tabName")))
x[[2L]]
else unlist(lapply(x[-1L], sys.function(), x[[1L]]), FALSE, FALSE)
if (is.null(root)) path else file.path(root, path)
}
lapply(myList, collapse)
[[1]]
[1] "tabnameGrandfather01"
[[2]]
[1] "Grandfather02/Father02_01/tabNameChild02_01_01"
[2] "Grandfather02/Father02_01/tabNameChild02_01_02"
[[3]]
[1] "Grandfather03/tabNameFather03_01"
[[4]]
[1] "Grandfather04/Father04_01/Child04_01_01/tabNameSuperChild04_01_01_01"
[2] "Grandfather04/Father04_01/Child04_01_01/tabNameSuperChild04_01_01_02"
[3] "Grandfather04/tabNameFather05_01"
评论
tabnameGrandfather01
Grandfather04/tabNameFather05_01