Esiste una funzione / ciclo R che può aggiungere un numero o una stringa univoci a un nome di file?

Aug 18 2020

Sono nuovo di R e Stack Overflow. Ho cercato ampiamente una risposta alla mia domanda e non credo che questa sia una domanda ripetuta.

Ho file .csv che vengono caricati nel mio script come frame di dati e ho bisogno di quei frame di dati salvati come file .Rda o .RDS.

Nel modo in cui ho scritto il codice, i vecchi file .Rda verranno sovrascritti nella directory in cui li ho salvati.

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

C'è un modo per creare un ciclo che allega un numero o una stringa casuale su un nome di file preesistente quando viene salvato, o anche una funzione che genera un ID univoco #? Quello che sto cercando è un output simile

data_1.Rda data_2.Rda data_3.Rda e così via dove _ # viene generato in modo casuale ogni volta che eseguo il codice.

Ho provato a creare un vettore come

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

quindi ha creato un ciclo per salvare attraverso ogni singola variabile, ma il ciclo ha semplicemente salvato i frame di dati come "a", "b", "c" ... Voglio sapere se c'è un modo per allegare quelle singole variabili a a nome preesistente ("data_a.Rda", "data_b.Rda" ...)

Non sono particolarmente esigente su nessun metodo fintanto che funziona.

Risposte

1 AllanCameron Aug 18 2020 at 03:33

Supponiamo che io abbia una directory come questa:

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

Quindi posso elencare i file nella my_datadirectory con:

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

E posso generare il percorso del file Rda "successivo" con una semplice funzione:

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

In modo che io possa fare:

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

Ciò significa che se voglio salvare un oggetto posso fare:

save(obj, file = next_rda())

Che salverà al file incrementale successivo. Poiché la funzione controlla ogni volta la directory, scrive sempre su un nuovo file, numerato in modo appropriato.

toujames Aug 18 2020 at 03:12

Vorrei controllare l'esistenza del nome del file. Se esiste, crea un meccanismo di ordinamento per creare un nuovo nome file. Che si tratti di una stringa generata in modo casuale o di un sistema di numerazione.

FYI: puoi memorizzare più variabili in 1 file rda:

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

pseudospin Aug 18 2020 at 03:19

Dai un'occhiata ?tempfile. Può generare nomi di file univoci da utilizzare.