Имея этот вложенный список:
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
Любая идея с использованием рекурсивной функции?
Помимо комментария Микаэлса, мой вопрос: как вы оказались в этом списке? Вы случайно не пытались проанализировать файл JSON или html-страницу?
Опс, извини, мой плохой. Это уже исправлено.
Вы можете попробовать эту рекурсивную функцию:
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
?