R语言中筛选带前导零指定编号范围图片文件的问题
解决方案
问题出在你生成编号序列的方式:0450:1700在R中会被解析为十进制数字序列(且开头带0的数字会被识别为八进制,比如0450实际等价于十进制的296,完全偏离了你需要的范围),生成的字符串没有前导零,自然匹配不上文件名里的0450、0451这类带前导零的四位编号。
解决核心是生成带前导零的四位字符串序列,再构建正则表达式,具体修改如下:
# 生成450-1700之间的四位带前导零字符串 transect <- sprintf("%04d", 450:1700) # 构建正则匹配模式 pat <- paste0("^South_1_20220322_(", paste(transect, collapse = "|"), ").jpg$") # 获取符合条件的文件列表 filestocopy <- list.files(pattern = pat) # 创建目标目录并复制文件(如果目标目录不存在) dir.create("target_directory", showWarnings = FALSE) file.copy(filestocopy, "target_directory")
关键说明
sprintf("%04d", x):将数字x格式化为固定四位的字符串,不足四位时自动在前面补零,刚好匹配文件名的编号格式(比如450变成0450,999变成0999)。- 去掉了原代码中不必要的
as.data.frame,list.files直接返回字符向量,可直接用于复制操作。
内容的提问来源于stack exchange,提问作者meganh
相关产品推荐
相关产品推荐

