从向量列表创建递归列表

10

假设我有以下列表,它代表一个目录结构:

> pages <- list("about.Rmd", "index.Rmd", c("stats", "index.Rmd"), c("stats", "substats", "index.Rmd"))
> pages
[[1]]
[1] "about.Rmd"

[[2]]
[1] "index.Rmd"

[[3]]
[1] "stats"     "index.Rmd"

[[4]]
[1] "stats"     "substats"  "index.Rmd"

我希望创建一个递归版本的列表,类似于这样:

> rpages <- list("about.Rmd", "index.Rmd", stats=list("index.Rmd", substats=list("index.Rmd")))
> rpages
[[1]]
[1] "about.Rmd"

[[2]]
[1] "index.Rmd"

$stats
$stats[[1]]
[1] "index.Rmd"

$stats$substats
$stats$substats[[1]]
[1] "index.Rmd"

我已经尝试了不同的方法,但现在似乎陷入了lapplysapply的泥沼中。

提前感谢任何提示。

1个回答

8
我认为这就是它的作用:
build_list = function(item, res) {
  if (length(item) > 1) {
    res[[item[1]]] = build_list(tail(item, -1), res[[item[1]]])
  } else {
    res = c(res, list(item))
  }
  res
}

res = list()
for (i in seq_along(pages)) res = build_list(pages[[i]], res)

res
#[[1]]
#[1] "about.Rmd"
#
#[[2]]
#[1] "index.Rmd"
#
#$stats
#$stats[[1]]
#[1] "index.Rmd"
#
#$stats$substats
#$stats$substats[[1]]
#[1] "index.Rmd"

1
比我想象的简单得多,谢谢你早先指出我的错误(如果可以的话,我会把我的A的声誉给你)。 - BrodieG
太好了!非常感谢。 - juba

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接