【问题标题】:Selecting files in a directory based on a list/character, issue with pattern =根据列表/字符选择目录中的文件,pattern =
【发布时间】:2024-04-25 19:15:02
【问题描述】:

我正在尝试根据由另一个文件夹中的文件组成的列表从“rawimages”文件夹中选择文件。将有 1000 个这样的文件,我在下面包含了一个作为示例。唯一的区别是 RAW 图像没有“_hc”,但 rawimages 文件夹中有其他文件。见下文:

ValidateImages <- list.files("C:/Users/JS22/Desktop/Validated")
#example of validated image name: Pia1.2016-10-07.2056+N2009_hc.tif
#Gives list as character value

ToselectfromRAW <- list.files("C:/Users/JS22/Desktop/Raw", pattern = ??ValidateImages??)
#example of raw image name: Pia1.2016-10-07.2056+N2009.tif  

file.copy(from = c(ToselectfromRAW), to = "C:/Users/JS22/Desktop/Training_Set", overwrite = TRUE)
#move the selected images to the desired location

我知道它与 list.files 函数的 'pattern =' 部分有关,但我不确定是什么。如果有帮助,我可以将列表更改为列表:

ValidateImages<- as.list(list.files("C:/Users/JS22/Desktop/Validated", all.files = TRUE))

任何帮助都会很重要!

(用于随机森林训练集仅供参考)

【问题讨论】:

    标签: r directory copy


    【解决方案1】:

    您可以获取目录中的文件列表,然后获取不包括_hcgrep

    directory <- "C:/Users/JS22/Desktop/Raw"
    
    # remove "_hc.tif" from input filenames to match on
    pattern <- gsub("_hc.tif", "", ValidateImages)
    pattern <- paste(gsub("([.|()\\^{}+$*?]|\\[|\\])", "\\\\\\1", pattern), collapse="|")
    
    grep(list.files(directory), pattern=pattern, value=TRUE)
    

    这将为提供的测试文件输出以下内容:

    [1] "Pia1.2016-10-08.0206+N2353_hc.tif" "Pia1.2016-10-08.0248+N752_hc.tif"  "Pia1.2016-10-12.0004+N1976_hc.tif"
    [4] "Pia1.2016-10-12.1300+N3159_hc.tif"
    

    【讨论】:

    • 感谢您的回复。这可行,但我需要从 10,000 个中选择 20 个特定文件,因此它需要基于经过验证的图像名称,因此我很困惑。
    • 它应该包括来自ValidateImages的文件,但没有_hc前缀?
    • 是的,这就是为什么我创建了要移动的所需图像的列表/字符
    • 可以从输入列表构建模式,我已经更新了我的答案。
    • 很好,但是我将如何使用 file.copy(from = c(ToselectfromRAW), to = "C:/Users/JS22/Desktop/Training_Set", overwrite =真的)
    最近更新 更多