Есть ли функция / цикл R, которая может добавить уникальный номер или строку к имени файла?

Aug 18 2020

Я новичок в 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" ...)

Я не особо интересуюсь каким-либо методом, если он работает.

Ответы

1 AllanCameron Aug 18 2020 at 03:33

Предположим, у меня есть такой каталог:

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

Что сохранится в следующем инкрементном файле. Поскольку функция каждый раз проверяет каталог, она всегда записывает в новый файл с соответствующим номером.

toujames Aug 18 2020 at 03:12

Я бы проверил наличие имени файла. Если он существует, создайте механизм сортировки для создания нового имени файла. Будь то случайно сгенерированная строка или система нумерации.

К вашему сведению: вы можете хранить несколько переменных в 1 файле rda:

> save(data1, data2, data3, file = "data.rda")

pseudospin Aug 18 2020 at 03:19

Взгляните на ?tempfile. Он может генерировать для вас уникальные имена файлов.