2011-01-20 91 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) 
} 

這只是大頭針子目錄到年底,一些不同的邏輯,可以用來給不同的排序。