¿Existe una función / bucle R que pueda agregar un número o cadena únicos a un nombre de archivo?

Aug 18 2020

Soy nuevo en R y Stack Overflow. He buscado extensamente una respuesta a mi pregunta y no creo que sea una pregunta repetida.

Tengo archivos .csv que se cargan en mi secuencia de comandos como marcos de datos, y necesito esos marcos de datos guardados como archivos .Rda o .RDS.

De la forma en que escribí el código, los archivos .Rda antiguos se sobrescribirán en el directorio en el que los guardo.

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

¿Hay alguna manera de crear un bucle que adjunte algún número aleatorio o cadena a un nombre de archivo preexistente cuando se guarda, o incluso una función que genere un número de identificación único? Lo que estoy buscando es una salida que parezca

data_1.Rda data_2.Rda data_3.Rda y así sucesivamente donde _ # se genera aleatoriamente cada vez que ejecuto el código.

He intentado crear un vector como

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

luego creó un ciclo para guardar a través de cada variable individual, pero el ciclo simplemente guardó los marcos de datos como "a", "b", "c" ... Quiero saber si hay una manera de adjuntar esas variables individuales a un nombre preexistente ("data_a.Rda", "data_b.Rda" ...)

No soy exigente con ningún método siempre que funcione.

Respuestas

1 AllanCameron Aug 18 2020 at 03:33

Supongamos que tengo un directorio como este:

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

Entonces puedo listar los archivos en el my_datadirectorio con:

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

Y puedo generar la ruta del archivo Rda "siguiente" con una función simple:

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")
}

Para que pueda hacer:

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

Esto significa que si quiero guardar un objeto, puedo hacer:

save(obj, file = next_rda())

Que se guardará en el siguiente archivo incremental. Dado que la función comprueba el directorio cada vez, siempre escribe en un nuevo archivo, numerado adecuadamente.

toujames Aug 18 2020 at 03:12

Verificaría la existencia del nombre del archivo. Si existe, cree algún mecanismo de clasificación para crear un nuevo nombre de archivo. Ya sea una cadena generada aleatoriamente o un sistema de numeración.

FYI: puede almacenar múltiples variables en 1 archivo rda por:

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

pseudospin Aug 18 2020 at 03:19

Échale un vistazo ?tempfile. Puede generar nombres de archivo únicos para su uso.