How to obtain a list of directories within a directory, like list.files(), but instead "list.dirs()"

This may be a very easy question for someone - I am able to use list.files() to obtain a list of files in a given directory, but if I want to get a list of directories, how would I do this? Is it somehow right in front of me as an option within list.files()?

Also, I'm using Windows, so if the answer is to shell out to some Linux/unix command, that won't work for me.

.NET for example has a Directory.GetFiles() method, and a separate Directory.GetDirectories() method, so I figured R would have an analogous pair. Thanks in advance.


Solution 1:

Update: A list.dirs function was added to the base package in revision 54353, which was included in the R-2.13.0 release in April, 2011.

list.dirs(path = ".", full.names = TRUE, recursive = TRUE)

So my function below was only useful for a few months. :)


I couldn't find a base R function to do this, but it would be pretty easy to write your own using:

dir()[file.info(dir())$isdir]

Update: here's a function (now corrected for Timothy Jones' comment):

list.dirs <- function(path=".", pattern=NULL, all.dirs=FALSE,
  full.names=FALSE, ignore.case=FALSE) {
  # use full.names=TRUE to pass to file.info
  all <- list.files(path, pattern, all.dirs,
           full.names=TRUE, recursive=FALSE, ignore.case)
  dirs <- all[file.info(all)$isdir]
  # determine whether to return full names or just dir names
  if(isTRUE(full.names))
    return(dirs)
  else
    return(basename(dirs))
}

Solution 2:

base R now includes a list.dirs function, so home-brewed variants are no longer necessary.

For example:

list.dirs('.', recursive=FALSE)