我试图使用RStudio从一个文件夹中对文件进行子集化,这些文件都是用4位数字(例如Horse0001.jpgHorse0002.jpg等)按顺序命名的.然而,我遇到了错误,因为我不知道如何让R读取文件索引的方式—R相反试图看他们作为Horse1.jpgHorse2.jpg,因此告诉我它不能运行命令,因为它找不到文件Horse1.jpg(它不存在).

我知道问题出在代码的start_index部分,但我不知道如何操作它.

我希望上面说的是有意义的.

我的代码如下:

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")) {
    file_name <- glue::glue("{category}.{ start_index:end_index }.png")
    dir_create(new_base_dir / subset_name / category)
    file_copy(original_dir / file_name,
              new_base_dir / subset_name / category / 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)

提前感谢!

推荐答案

这样做应该有效:

file_name <- glue::glue("{category}{ sprintf('%04d', start_index:end_index) }.png")

然而,更有效的实施方式是:

file_name <- sprintf('%s%04d.png', category, start_index:end_index) 
> microbenchmark(glue = glue::glue("{category}{ sprintf('%04d', start_index:end_index) }.png"),
+ sprintf = sprintf('%s%04d.png', category, start_index:end_index), times = 1000)
Unit: microseconds
    expr     min      lq     mean  median       uq      max neval
    glue 267.771 278.677 295.2356 284.212 291.2230 7400.090  1000
 sprintf 184.623 187.247 192.3178 189.625 195.1395  456.002  1000

R相关问答推荐

使用Shiny组合和显示复制和粘贴的数据

在R中查找每个组不同时间段的总天数

如何删除R中除某些特定名称外的所有字符串?

从gtsummary包中使用tBL_strata()和tBL_summary()时删除变量标签

用值序列对行进行子集化,并标识序列开始的列

根据多个条件增加y轴高度以适应geom_text标签

条形图和在Ploly中悬停的问题

将小数分隔符放在R中的前两位数字之后

如何使用ggplot对堆叠条形图进行嵌套排序?

使用R中的正则表达式将一列分割为多列

`lazy_dt`不支持`dplyr/across`?

将向量元素重新排序为R中的第二个

如何使用同比折线图中的个别日

R代码,用于在线条图下显示观测表

将列表中的字符串粘贴到R中for循环内的dplyr筛选器中

主题(Legend.key=Element_RECT(Fill=&Quot;White&Quot;))不起作用

TidyVerse中长度不等的列结合向量

我正在try 创建一个接近cos(X)的值的While循环,以便它在-或+1-E10范围内

如果极点中存在部分匹配,则替换整个字符串

使用卡环从R中的列中删除单位(&C)