【发布时间】:2011-06-12 15:36:23
【问题描述】:
这个Question 询问列出当前目录中的目录(不是文件)。我在对其中一个答案的评论中指出,我们不能使用 dir 和 list.files 等函数的 recursive 参数递归地列出当前目录中的目录。
对此的明显解决方案是编写一个递归函数,该函数列出当前目录中的目录,依次在每个目录上调用自身,依此类推,添加到最后返回的目录的整体列表中递归。
Recall() 函数似乎是理想的候选者,但我从来没有真正了解过如何编写递归函数,每次调用时都会添加到最终输出。
如何修改此功能:
list.dirs <- function(path) {
x <- dir(path, full.names = TRUE)
dnames <- x[file_test("-d", x)]
dnames
}
让它递归地遍历dnames 中的目录,将它找到的任何目录添加到在dnames 目录中找到的所有目录的列表中,等等...?
【问题讨论】:
-
我认为我的主要问题并不是真正了解应该如何编写一个函数以在其自身上使用
Recall? -
要在递归函数中使用
Recall,请调用Recall而不是函数的名称。 -
@hadley 谢谢,但我通过
?Recall做到了这一点。这是如何安排返回的对象并将它们组合起来,我不太了解。 -
所以也许你的困惑不在于使用recall(这很简单),而是如何编写一般的递归函数(这真的很复杂)?
-
@hadley 是的,我认为你一针见血。我希望如果有人可以展示如何使用
Recall使list.dirs函数递归,我会更好地了解它是如何工作的。我挣扎了很长一段时间试图想出一个递归版本。