肯定是一个非常新的问题,但是如何在 list.dirs 函数中包含一个模式?
例如,list.files 函数
Imagery=list.files(full.names=TRUE, recursive=TRUE, pattern= "*20m*.tif$")
Run Code Online (Sandbox Code Playgroud)
返回名称中包含 20m 且扩展名为 .tif 的所有文件。
但是当我尝试将此逻辑应用于 list.dirs 时
directories=list.dirs(full.names = TRUE, recursive=TRUE, pattern="R10m" )
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
Error in list.dirs(full.names = TRUE, recursive = TRUE, pattern = "R10m") :
unused argument (pattern = "R10m")
Run Code Online (Sandbox Code Playgroud)
希望我没有在这里遗漏一些明显的东西。我的目标是获取具有名为“R10m”的文件夹的所有目录的完整路径。我有很多文件夹,其中有很多子目录,其中大多数都具有相似的结构。我只想列出那些拥有此文件夹的文件,并在其中列出所有 tif 文件。我知道我可以只使用 list.files 选项获取我需要的文件,但我稍后需要目录路径和文件名作为变量。
预先感谢您的时间,
最好的问候,达沃
三种选择:
dirs <- list.dirs()
dirs <- dirs[ grepl(your_pattern, dirs) ]
Run Code Online (Sandbox Code Playgroud)
或者
dirs <- list.dirs()
dirs <- grep(your_pattern, dirs, value = TRUE)
Run Code Online (Sandbox Code Playgroud)
或者
files <- list.files(pattern = your_pattern, recursive = TRUE, include.dirs = TRUE)
dirs <- files[ file.info(files)$isdir ]
Run Code Online (Sandbox Code Playgroud)
dir,与list.dirs提供该功能不同:
dir(path = ".", pattern = NULL, all.files = FALSE,
full.names = FALSE, recursive = FALSE,
ignore.case = FALSE, include.dirs = FALSE, no.. = FALSE)
Run Code Online (Sandbox Code Playgroud)
在你的例子中:
directories <- dirs(full.names = TRUE, recursive=TRUE, pattern="R10m")
Run Code Online (Sandbox Code Playgroud)
是的,我也觉得很奇怪,有 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()
Run Code Online (Sandbox Code Playgroud)
[1]“。” “./1R10ma” “./1R200ma” [4] “./2R10ma” “./2R200ma” “./3R10ma” [7] “./3R200ma” “./solo_kit-figure”
dir()
Run Code Online (Sandbox Code Playgroud)
[1]“1R10ma”“1R200ma”“2R10ma”“2R200ma”
[5]“3R10ma”“3R200ma”“a1.bed”“a2.bed”
[9]“a.bed”“solo_kit-figure”“solo_kit。医学博士”
dir(pattern = "R10m")
# dir(pattern = "*R10m")
# also works
Run Code Online (Sandbox Code Playgroud)
“1R10ma” “2R10ma” “3R10ma”
dir还列出了文件,因此如果该模式适合文件和目录,则可能会出现问题,但我想对于大多数应用程序来说,它都会正常工作。
| 归档时间: |
|
| 查看次数: |
6728 次 |
| 最近记录: |