Есть ли функция / цикл 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" ...)
Я не особо интересуюсь каким-либо методом, если он работает.
Ответы
Предположим, у меня есть такой каталог:
/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())
Что сохранится в следующем инкрементном файле. Поскольку функция каждый раз проверяет каталог, она всегда записывает в новый файл с соответствующим номером.
Я бы проверил наличие имени файла. Если он существует, создайте механизм сортировки для создания нового имени файла. Будь то случайно сгенерированная строка или система нумерации.
К вашему сведению: вы можете хранить несколько переменных в 1 файле rda:
> save(data1, data2, data3, file = "data.rda")
Взгляните на ?tempfile
. Он может генерировать для вас уникальные имена файлов.