2011-01-20 62 views
2

这个Question询问在当前目录中列出目录(不是文件)。我在其中一个答案的评论中指出,我们不能使用dirlist.files等函数的recursive参数递归列出当前目录中的目录。如何使用Recall()`写递归函数递归列出给定目录中的目录?

对此的一个明显的解决方案是编写一个递归函数,该函数列出当前目录中的目录,并在每个目录上依次调用自身,依此类推,添加到在递归结束。

Recall()函数似乎是理想的候选人,但我从来没有真正了解到如何编写一个递归函数,每次调用都会添加到最终输出中。

一个会如何修改这个功能:

list.dirs <- function(path) { 
    x <- dir(path, full.names = TRUE) 
    dnames <- x[file_test("-d", x)] 
    dnames 
} 

把它向下递归通过目录中dnames将发现到dnames目录中找到的所有目录的列表中的任何目录,等等.. 。?

+0

我觉得我的主要问题不是真的在想如何编写一个函数来使用自己的Recall函数? – 2011-01-20 18:16:08

+0

要在递归函数中使用Recall,请调用Recall而不是函数的名称。 – hadley 2011-01-20 21:03:56

回答

3

这里有一种方法:

list.dirs <- function(path) { 
    x <- dir(path, full.names = TRUE) 
    dnames <- x[file_test("-d", x)] 
    tmp <- character(0) 
    for(i in seq_along(dnames)) { 
     tmp <- c(tmp, Recall(dnames[i])) 
    } 
    c(dnames,tmp) 
} 

这只是大头针子目录到年底,一些不同的逻辑,可以用来给不同的排序。