例如,list.files函数
Imagery=list.files(full.names=TRUE, recursive=TRUE, pattern= "*20m*.tif$")
返回名称中包含20m的所有文件,并以.tif作为扩展名。
但是当我尝试将此逻辑应用于list.dirs
时directories=list.dirs(full.names = TRUE, recursive=TRUE, pattern="R10m" )
我收到此错误:
Error in list.dirs(full.names = TRUE, recursive = TRUE, pattern = "R10m") :
unused argument (pattern = "R10m")
希望我不会错过这里明显的东西。 我的目标是获取具有名为“R10m”的文件夹的所有目录的完整路径。我有很多具有许多子目录的文件夹,并且大多数具有相似的结构。我想仅列出具有此文件夹的文件夹,并在其中列出所有tif文件。我知道我只需要list.files选项就可以得到我需要的文件,但是我需要以后的目录路径和文件名作为变量。
预先感谢您的时间,
祝你好运, 达沃尔
答案 0 :(得分:4)
三种选择:
dirs <- list.dirs()
dirs <- dirs[ grepl(your_pattern, dirs) ]
或
dirs <- list.dirs()
dirs <- grep(your_pattern, dirs, value = TRUE)
或
files <- list.files(pattern = your_pattern, recursive = TRUE, include.dirs = TRUE)
dirs <- files[ file.info(files)$isdir ]
答案 1 :(得分:0)
dir
不同, list.dirs
提供了该功能:
dir(path = ".", pattern = NULL, all.files = FALSE,
full.names = FALSE, recursive = FALSE,
ignore.case = FALSE, include.dirs = FALSE, no.. = FALSE)
在你的例子中:
directories <- dirs(full.names = TRUE, recursive=TRUE, pattern="R10m")
是的,我也觉得很奇怪,有2个基本功能列出目录,其中一个,尽管名称与list.files
的相似性并不像提供相同的功能一样。如果有人知道原因,我会非常有兴趣知道。
<强>更新强>
在Gregor的评论之后,我决定创建一个可重现的例子来测试我的解决方案:
test_dirs <- c(
paste0(c(1:3), "R10m", rep("a", 3)),
paste0(c(1:3), "R200m", rep("a", 3))
)
for (test_dir in test_dirs){
dir.create(test_dir)
}
list.dirs()
[1]“。” “.1R10ma”“。/ R200ma”[4] “./2R10ma”“。{R200ma”“./ 3R10ma”[7] “./3R200ma”“。/ sol_kit-figure”
dir()
[1]“1R10ma”“1R200ma”“2R10ma”“2R200ma”
[5]“3R10ma”“3R200ma”“a1.bed”“a2.bed”
[9]“a.bed”“solo_kit-figure”“solo_kit.md”
dir(pattern = "R10m")
# dir(pattern = "*R10m")
# also works
“1R10ma”“2R10ma”“3R10ma”
dir
还列出了文件,因此如果模式适合文件和目录,则可能是一个问题,但我想对于大多数应用程序来说它可以正常工作。