将目录树表示为递归列表

标签 r list recursive-datastructures directory-tree

我被困在一项特定的任务上。我想要的是一个给定目录路径的函数,该函数将返回递归列表作为输出。

输出的形式应为myList $ dir $ subdir $ subdir $ fullFilePath

所以基本上我想将目录树表示为某个列表。我获得了所有文件,获得了每个文件的所有子目录,但是对于如何将它们全部放入具有多个级别的列表中,我还是很固执。

最佳答案

这是使用递归的解决方案:

tree.list <- function(file.or.dir) {
    isdir <- file.info(file.or.dir)$isdir
    if (!isdir) {
        out <- file.or.dir
    } else {
        files <- list.files(file.or.dir, full.names   = TRUE,
                                         include.dirs = TRUE)
        out <- lapply(files, tree.list)
        names(out) <- basename(files)
    }
    out
}

我已经在一个小目录上对它进行了测试
test.dir <- tree.list("./test")
test.dir
# $a
# $a$`1.txt`
# [1] "./test/a/1.txt"
# 
# $a$aa
# $a$aa$`2.txt`
# [1] "./test/a/aa/2.txt"
# 
# $b
# $b$`3.txt`
# [1] "./test/b/3.txt"

如果这太慢,无法满足您的需求,我会考虑将所有文件读入list.filesrecursive = TRUE的单个调用中,然后进行一些解析。

关于将目录树表示为递归列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14188197/

相关文章:

Python list() vs 列表理解构建速度

python - 如何从带有子元组的元组创建列表?

Haskell Labeled AST : No instance for (Show1 (Label a)), 如何构建实例?

database - 高效持久的递归数据结构

r - 用于编写函数的rlang运算符的解释

R 使用 beside=TRUE 参数时出错

r - 在具有重复观察的行之间生成精确加权平均值

c++ - 尝试在 for 循环中使用 2 个列表迭代器

ios - 需要有关 Objective-C 中二进制搜索树实现的指导

r - R 中类的对象的数组/列表/集合