在RStudio中按4位序列索引提取文件时遇文件名匹配错误求助
问题解决:生成带前导零的4位数字文件名
你的问题核心是没有给数字补前导零,导致R生成的文件名是horse1.png,但实际文件是horse0001.png这类4位数字格式。修改代码的关键是把索引数字格式化为4位带前导零的字符串,具体改动如下:
修改后的完整代码
library(fs) library(glue) original_dir <- path("data/horsies") new_base_dir <- path("data/horsies2") make_subset <- function(subset_name, start_index, end_index) { # 遍历每个类别 for (category in c("horse", "ponies")) { # 创建目标文件夹 target_dir <- new_base_dir / subset_name / category dir_create(target_dir) # 逐个处理每个索引,格式化4位带前导零的数字 for (idx in start_index:end_index) { # 用sprintf生成4位数字,%04d表示补零到4位 num_str <- sprintf("%04d", idx) file_name <- glue::glue("{category}{num_str}.png") # 复制文件 file_copy(original_dir / file_name, target_dir / file_name) } } } # 调用函数 make_subset("train", start_index = 1, end_index = 2000) make_subset("validation", start_index = 2001, end_index = 2200) make_subset("test", start_index = 2201, end_index = 2500)
关键改动说明
- 新增内层循环遍历每个索引
idx,避免直接把向量丢进glue导致格式错误 - 用
sprintf("%04d", idx)把数字转换成4位带前导零的字符串(比如1→"0001",2001→"2001") - 修正了文件名拼接逻辑,原来的
{category}.{...}多了个点,改成{category}{num_str}匹配你例子里的Horse0001.jpg格式
如果你的文件扩展名是.jpg而不是.png,记得把代码里的.png改成.jpg。
内容的提问来源于stack exchange,提问作者zappbran
相关产品推荐
相关产品推荐

