假设我有一个字符向量:
c("A01","A02","B0101","B0102","B02","C010101","C010102",
"C010103","C010201","C010202","C02","C03",...)
并且它具有以下属性(因为我不知道如何解释我的问题一般,我会使用一些xml术语,如" node"," parent& #34;和"孩子"):
现在,从矢量我想构建一个具有以下属性的列表:
这是一个基于向量的前5个元素的示例列表:
a<-list("A"=list("01"=NULL,"02"=NULL),"B"=list("01"=list("01"=NULL,"02"=NULL),"02"=NULL))
>str(a)
List of 2
$ A:List of 2
..$ 01: NULL
..$ 02: NULL
$ B:List of 2
..$ 01:List of 2
.. ..$ 01: NULL
.. ..$ 02: NULL
..$ 02: NULL
我想知道是否有任何R函数可以生成我想要的列表作为输入;如果没有,怎么写一个可以?
答案 0 :(得分:0)
您可以通过递归方式调用处理列表的函数来执行此操作:
dat <- c("A01","A02","B0101","B0102","B02")
make.list <- function(x) {
parent <- substr(x, 1, 2)
remaining <- substr(x, 3, nchar(x))
lapply(split(remaining, parent), function(y) {
if (all(nchar(y) == 0)) NULL
else make.list(y)
})
}
parent <- substr(dat, 1, 1)
remaining <- substr(dat, 2, nchar(dat))
A <- lapply(split(remaining, parent), make.list)
str(A)
# List of 2
# $ A:List of 2
# ..$ 01: NULL
# ..$ 02: NULL
# $ B:List of 2
# ..$ 01:List of 2
# .. ..$ 01: NULL
# .. ..$ 02: NULL
# ..$ 02: NULL