これは誰かにとって非常に簡単な質問かもしれません-list.files()
を使用して特定のディレクトリ内のファイルのリストを取得できますが、ディレクトリのリストを取得したい場合、どうすればよいですか? list.files()
内のオプションとして、どういうわけか私の目の前にありますか?
また、私はWindowsを使用しているので、答えがLinux/unixコマンドに対するシェルアウトである場合、それは私にとっては機能しません。
たとえば.NETにはDirectory.GetFiles()
メソッドと別のDirectory.GetDirectories()
メソッドがあるため、Rには類似のペアがあると考えました。前もって感謝します。
更新:A list.dirs
関数は、リビジョン54353で基本パッケージに追加され、2011年4月のR-2.13.0リリースに含まれていました。
list.dirs(path = ".", full.names = TRUE, recursive = TRUE)
そのため、以下の私の機能は数か月間しか役に立ちませんでした。 :)
これを行うためのベースR関数は見つかりませんでしたが、次を使用して独自のR関数を作成するのは非常に簡単です。
dir()[file.info(dir())$isdir]
更新:ここに関数があります(Timothy Jonesのコメントを修正しました):
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))
}
このスレッドを更新するだけです:
Rの新しいバージョン(現在2.5.1を使用しています)には、list.dirs
基本インストールに含まれる機能:
list.dirsには暗黙的にall.files = TRUEがあり、再帰= TRUEの場合、答えにはパス自体が含まれます(読み取り可能なディレクトリである場合)。
list.dirs <- function(...) {
x <- dir(...)
x[file_test("-d", x)]
}
役に立つかもしれない?
これをどのように再帰的に行うことができますか? (recursive
のdir
引数は、ディレクトリ名を返さず、各ディレクトリ内のファイルのみを返すなどの理由で、これらの関数を中断します...)。
このようなものはどうですか、試してみてください:
dir('.')[file.info(dir('.',full.names=T))$isdir]
Linux/UNIXコマンドにシェルアウトしたくないと言いますが、Windowsコマンドにシェルアウトしてもよいと思います。その場合、これはそれを行います:
Shell("dir/ad/b", intern = TRUE)
そして、これは再帰的にそれを行います:
Shell("dir/ad/b/s", intern = TRUE)
通常、ここでは他のプラットフォームに依存しないソリューションをお勧めしますが、特にできるだけ簡単かつ直接回答を得ることに関心があるインタラクティブな使用の場合、これはあまり手間がかかりません。