我想列出目录中包含特定数值的所有*.tif文件。例子:Path_source <- "C:/Files/"
在这个文件夹中,我有1000个文件夹,每个文件夹命名为jobXXX
,其中XXX
代表数值1-999。所以有一个文件夹job0
,job1
,…,job999
。在每个jobXXX
文件夹中,我有其他文件夹和文件。从这个文件夹结构中,我想用以下模式提取所有文件:
Year <- 2021
file.ls <- list.files(path=Path_source, pattern=paste0("Text_",Year,".*\.tif"),all.files = TRUE, full.names = TRUE, recursive = TRUE)
所以我现在缺少的元素是过滤目录中具有特定作业编号的文件夹:
jobs <- c(1,14,45,67,129,834)
结果示例:
> file.ls
[1] "C:/Files/job14/folder12/Text_2021_anothertext_abc.tif"
[2] "C:/Files/job45/folder81/Text_2021_anothertext_efg.tif"
我应该使用哪个函数?
谢谢
下面的函数创建部分文件名。然后,sapply
循环获取函数返回的vector中的目录。
make_dir_name <- function(Path_prefix, job_prefix, job_number){
fmt_string <- paste0(Path_prefix, job_prefix, "%d[^[:digit:]]+")
sprintf(fmt_string, job_number)
}
jobs_dirs <- make_dir_name(Path_source, "job", jobs)
i <- sapply(jobs_dirs, (d) grep(d, file.ls))
i <- unname(unlist(i))
file.ls[i]
测试数据file.ls <-
c("C:/Files/job14/folder12/Text_2021_anothertext_abc.tif",
"C:/Files/job45/folder81/Text_2021_anothertext_efg.tif")
file.ls <-
c("C:/Files/job14/folder12/Text_2021_anothertext_abc.tif",
"C:/Files/job45/folder81/Text_2021_anothertext_efg.tif")
使用base r可能会有帮助。
files <- paste("job", seq(1,10), ".tif", sep = "")
numbers <- seq(1,10, by = 2)
files_I_Want <- paste("job",numbers, ".tif",sep = "")
files[files %in% files_I_Want]
使用%in%
操作符,我可以看到我想要向量的构造文件中有哪些文件。