Dosya adına benzersiz bir sayı veya dize ekleyebilen bir R işlevi / döngüsü var mı?
R ve Stack Overflow'da yeniyim. Soruma kapsamlı bir şekilde yanıt aradım ve bunun tekrarlanan bir soru olduğuna inanmıyorum.
Komut dosyama veri çerçeveleri olarak yüklenen .csv dosyalarım var ve .Rda veya .RDS dosyaları olarak kaydedilmiş bu veri çerçevelerine ihtiyacım var.
Kodu yazma şeklimde, eski .Rda dosyalarının üzerine kaydettiğim dizine yazılacak.
base::save(data, file="data.Rda")
Kaydedildiğinde önceden var olan bir dosya adına rastgele bir sayı veya dizge ekleyen bir döngü veya hatta benzersiz bir kimlik numarası oluşturan bir işlev oluşturmanın bir yolu var mı? Aradığım şey şuna benzeyen bir çıktı
data_1.Rda data_2.Rda data_3.Rda vb. kodu her çalıştırdığımda _ # rasgele oluşturuluyor.
Gibi bir vektör oluşturmaya çalıştım
x<-c(a, b, c, d, e, f, g, h, i, j, k)
daha sonra her bir değişkeni kaydetmek için bir döngü oluşturdu, ancak döngü veri çerçevelerini basitçe "a", "b", "c" olarak kaydetti ... Bu tek tek değişkenleri bir önceden var olan ad ("data_a.Rda", "data_b.Rda" ...)
Çalıştığı sürece herhangi bir yöntem konusunda titiz değilim.
Yanıtlar
Şöyle bir dizinim olduğunu varsayalım:
/Documents (R home)
|
|-- my_data
|
|--data_1.Rda
|--data_2.Rda
Sonra my_data
dizindeki dosyaları şu şekilde listeleyebilirim :
list.files(path.expand("~/my_data/"))
#> [1] "data_1.Rda" "data_2.Rda"
Ve basit bir işlevle "sonraki" Rda dosya yolunu oluşturabilirim:
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")
}
Böylece yapabilirim:
next_rda()
#> [1] "C:/Users/Administrator/Documents/my_data/data_3.Rda"
Bu, bir nesneyi kaydetmek istersem yapabileceğim anlamına gelir:
save(obj, file = next_rda())
Bir sonraki artımlı dosyaya kaydedilecek. İşlev dizini her seferinde kontrol ettiğinden, her zaman uygun şekilde numaralandırılmış yeni bir dosyaya yazar.
Dosya adının varlığını kontrol ederdim. Varsa, yeni bir dosya adı oluşturmak için bir sıralama mekanizması oluşturun. Rastgele oluşturulmuş bir dize veya bir numaralandırma sistemi olup olmadığı.
Bilginize: 1 rda dosyasında birden çok değişkeni şu şekilde saklayabilirsiniz:
> save(data1, data2, data3, file = "data.rda")
Bir göz atın ?tempfile
. Kullanmanız için benzersiz dosya adları oluşturabilir.