क्या कोई आर फ़ंक्शन / लूप है जो फ़ाइल नाम के लिए एक अद्वितीय संख्या या स्ट्रिंग जोड़ सकता है?

Aug 18 2020

मैं आर और स्टैक ओवरफ्लो के लिए नया हूं। मैंने अपने प्रश्न के उत्तर के लिए बड़े पैमाने पर देखा है, और मुझे विश्वास नहीं है कि यह एक दोहराव वाला प्रश्न है।

मेरे पास .csv फाइलें हैं जो मेरी स्क्रिप्ट में डेटा फ़्रेम के रूप में लोड की जाती हैं, और मुझे उन डेटा फ़्रेमों की आवश्यकता होती है जिन्हें .Rda या .RDS फ़ाइलों के रूप में सहेजा जाता है।

जिस तरह से मेरे पास कोड लिखा है, पुरानी .Rda फाइलें उस निर्देशिका में ओवरराइट हो जाएंगी जो मेरे पास है उन्हें सहेजने के लिए।

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

क्या लूप बनाने का कोई तरीका है जो सहेजने पर किसी पूर्व-मौजूदा फ़ाइल नाम पर कुछ यादृच्छिक संख्या या स्ट्रिंग संलग्न करता है, या एक फ़ंक्शन जो एक अद्वितीय आईडी # उत्पन्न करता है? मैं जो खोज रहा हूं वह एक ऐसा आउटपुट है जो दिखता है

data_1.Rda data_2.Rda data_3.Rda और इतने पर जहां _ # बेतरतीब ढंग से हर बार जब भी मैं कोड चलाता हूँ उत्पन्न होता है।

मैंने एक वेक्टर बनाने की कोशिश की है जैसे कि

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

तब प्रत्येक व्यक्तिगत चर के माध्यम से सहेजने के लिए एक लूप बनाया जाता है, लेकिन लूप ने डेटा फ़्रेम को "ए", "बी", "सी" के रूप में सहेजा है ... मैं जानना चाहता हूं कि क्या उन व्यक्तिगत चर को संलग्न करने का एक तरीका है पहले से मौजूद नाम ("data_a.Rda", "data_b.Rda" ...)

जब तक यह काम करता है मैं किसी भी विधि के बारे में विशेष नहीं हूं।

जवाब

1 AllanCameron Aug 18 2020 at 03:33

मान लीजिए कि मेरे पास इस तरह की एक निर्देशिका है:

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

तब मैं my_dataनिर्देशिका में फ़ाइलों को सूची में रख सकता हूं :

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

और मैं एक साधारण फ़ंक्शन के साथ "अगला" Rda फ़ाइल पथ उत्पन्न कर सकता हूं:

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

ताकि मैं कर सकूं:

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

इसका मतलब है कि अगर मैं किसी वस्तु को सहेजना चाहता हूं तो मैं कर सकता हूं:

save(obj, file = next_rda())

जो अगली वृद्धिशील फ़ाइल में सहेजेगा। चूंकि फ़ंक्शन हर बार निर्देशिका की जांच करता है, यह हमेशा एक नई फ़ाइल को लिखता है, उचित रूप से गिने।

toujames Aug 18 2020 at 03:12

मैं फ़ाइल नाम के अस्तित्व की जाँच करूँगा। यदि यह मौजूद है, तो एक नया फ़ाइल नाम बनाने के लिए कुछ प्रकार का तंत्र बनाएं। चाहे वह बेतरतीब ढंग से उत्पन्न स्ट्रिंग हो या एक नंबरिंग सिस्टम।

FYI करें: आप 1 आरडीए फ़ाइल में कई चर स्टोर कर सकते हैं:

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

pseudospin Aug 18 2020 at 03:19

एक नजर है ?tempfile। यह आपके लिए उपयोग करने के लिए अद्वितीय फ़ाइल नाम उत्पन्न कर सकता है।