【问题标题】:Is there an R function/loop that can add a unique number or string to a filename?是否有可以将唯一数字或字符串添加到文件名的 R 函数/循环?
【发布时间】:2020-12-07 00:02:16
【问题描述】:

我是 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”...)

我不拘泥于任何方法,只要它有效。

【问题讨论】:

  • 您可以通过file.exists 进行检查,如果是,则创建一个唯一的文件名
  • @akrun 您链接的帖子很相似,但我不相信它回答了这个特定问题。

标签: r


【解决方案1】:

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

/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())

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

【讨论】:

  • 嗨艾伦,我相信这是我一直在寻找的功能;但是,当我使用保存功能时,我收到一条错误消息,上面写着“未使用的参数:next_rda()”。你对为什么会这样有什么建议吗? next_rda() 函数本身可以工作。
  • @LG_research 抱歉,应该是 file = next_rda()
【解决方案2】:

我会检查文件名是否存在。 如果存在,则创建某种排序机制来创建新文件名。 无论是随机生成的字符串还是编号系统。

仅供参考: 您可以通过以下方式将多个变量存储在 1 个 rda 文件中:

&gt; save(data1, data2, data3, file = "data.rda")

【讨论】:

    【解决方案3】:

    看看?tempfile。它可以生成唯一的文件名供您使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-25
      • 2021-06-11
      • 2021-09-05
      • 2019-04-29
      • 2021-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多