Esiste una funzione / ciclo R che può aggiungere un numero o una stringa univoci a un nome di file?
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
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_data
directory 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.
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")
Dai un'occhiata ?tempfile
. Può generare nomi di file univoci da utilizzare.