首页 > 解决方案 > 是否有可以将唯一数字或字符串添加到文件名的 R 函数/循环?

问题描述

我是 R 和 Stack Overflow 的新手。我已经广泛寻找我的问题的答案,我不相信这是一个重复的问题。

我有 .csv 文件作为数据帧加载到我的脚本中,我需要将这些数据帧保存为 .Rda 或 .RDS 文件。

按照我编写代码的方式,旧的 .Rda 文件将在我保存它们的目录中被覆盖。

base::save(data, file="data.Rda")

有没有办法创建一个循环,在保存时将一些随机数或字符串附加到预先存在的文件名上,或者甚至是一个生成唯一 ID # 的函数?我正在寻找的是一个看起来像的输出

data_1.Rda data_2.Rda data_3.Rda 等等,每次运行代码时都会随机生成 _#。

我试图创建一个向量,例如

x<-c(a, b, c, d, e, f, g, h, i, j, k)

然后创建了一个循环来保存每个单独的变量,但循环只是将数据框保存为“a”、“b”、“c”......我想知道是否有办法将这些单独的变量附加到预先存在的名称(“data_a.Rda”、“data_b.Rda”...)

只要方法有效,我对任何方法都不特别。

标签: r

解决方案


假设我有一个这样的目录:

/Documents (R home)
     |
     |-- my_data
             |
             |--data_1.Rda
             |--data_2.Rda

然后我可以列出目录中的文件my_data

list.files(path.expand("~/my_data/"))
#> [1] "data_1.Rda"  "data_2.Rda"

我可以使用一个简单的函数生成“下一个”Rda 文件路径:

next_rda <- function() {
  f <- list.files(path.expand("~/my_data/"), pattern = "^data_\\d+\\.Rda")
  num <- max(as.numeric(gsub("^data_(\\d)\\.Rda", "\\1", f)) + 1)
  paste0(path.expand("~/my_data/data_"), num, ".Rda")
}

这样我就可以做到:

next_rda()
#> [1] "C:/Users/Administrator/Documents/my_data/data_3.Rda"

这意味着如果我想保存一个对象,我可以这样做:

save(obj, file = next_rda())

这将保存到下一个增量文件。由于该函数每次都会检查目录,因此它总是写入一个新文件,并有适当的编号。


推荐阅读