Apakah ada fungsi / loop R yang dapat menambahkan nomor atau string unik ke nama file?
Saya baru mengenal R dan Stack Overflow. Saya telah mencari jawaban atas pertanyaan saya secara ekstensif, dan saya tidak percaya ini adalah pertanyaan yang berulang.
Saya memiliki file .csv yang dimuat ke dalam skrip saya sebagai bingkai data, dan saya memerlukan bingkai data tersebut disimpan sebagai file .Rda atau .RDS.
Cara saya menulis kode, file .Rda lama akan ditimpa di direktori tempat saya menyimpannya.
base::save(data, file="data.Rda")
Apakah ada cara untuk membuat perulangan yang melampirkan beberapa nomor atau string acak ke nama file yang sudah ada sebelumnya saat disimpan, atau bahkan fungsi yang menghasilkan ID unik #? Yang saya cari adalah keluaran yang terlihat seperti itu
data_1.Rda data_2.Rda data_3.Rda dan seterusnya di mana _ # dihasilkan secara acak setiap kali saya menjalankan kode.
Saya telah mencoba membuat vektor seperti
x<-c(a, b, c, d, e, f, g, h, i, j, k)
kemudian membuat loop untuk menyimpan melalui setiap variabel individu, tetapi loop hanya menyimpan data frame sebagai "a", "b", "c" ... Saya ingin tahu apakah ada cara untuk melampirkan variabel individu tersebut ke a nama yang sudah ada sebelumnya ("data_a.Rda", "data_b.Rda" ...)
Saya tidak khusus tentang metode apa pun asalkan berhasil.
Jawaban
Misalkan saya memiliki direktori seperti ini:
/Documents (R home)
|
|-- my_data
|
|--data_1.Rda
|--data_2.Rda
Kemudian saya dapat membuat daftar file di my_data
direktori dengan:
list.files(path.expand("~/my_data/"))
#> [1] "data_1.Rda" "data_2.Rda"
Dan saya dapat membuat jalur file Rda "berikutnya" dengan fungsi sederhana:
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")
}
Sehingga saya bisa melakukan:
next_rda()
#> [1] "C:/Users/Administrator/Documents/my_data/data_3.Rda"
Ini berarti jika saya ingin menyimpan objek yang dapat saya lakukan:
save(obj, file = next_rda())
Yang akan disimpan ke file inkremental berikutnya. Karena fungsi memeriksa direktori setiap kali, ia selalu menulis ke file baru, dengan nomor yang tepat.
Saya akan memeriksa keberadaan nama file. Jika ada, buat semacam mekanisme untuk membuat nama file baru. Apakah itu string yang dibuat secara acak atau sistem penomoran.
FYI: Anda dapat menyimpan banyak variabel dalam 1 file rda dengan:
> save(data1, data2, data3, file = "data.rda")
Silahkan lihat ?tempfile
. Ini dapat menghasilkan nama file unik untuk Anda gunakan.