มีฟังก์ชัน R / ลูปที่สามารถเพิ่มหมายเลขเฉพาะหรือสตริงให้กับชื่อไฟล์ได้หรือไม่

Aug 18 2020

ฉันยังใหม่กับ R และ Stack Overflow ฉันได้ค้นหาคำตอบสำหรับคำถามของฉันอย่างละเอียดแล้วและฉันไม่เชื่อว่านี่เป็นคำถามซ้ำ

ฉันมีไฟล์. csv ที่โหลดลงในสคริปต์ของฉันเป็นเฟรมข้อมูลและฉันต้องการเฟรมข้อมูลเหล่านั้นที่บันทึกเป็นไฟล์. Rda หรือ. RDS

วิธีที่ฉันเขียนโค้ดไฟล์. Rda เก่าจะถูกเขียนทับในไดเร็กทอรีที่ฉันบันทึกไว้

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

มีวิธีสร้างลูปที่แนบหมายเลขสุ่มหรือสตริงเข้ากับชื่อไฟล์ที่มีอยู่แล้วเมื่อถูกบันทึกหรือแม้กระทั่งฟังก์ชันที่สร้าง ID เฉพาะ # สิ่งที่ฉันกำลังมองหาคือผลลัพธ์ที่ดูเหมือน

data_1.Rda data_2.Rda data_3.Rda และอื่น ๆ ที่ _ # ถูกสร้างขึ้นแบบสุ่มทุกครั้งที่เรียกใช้รหัส

ฉันได้พยายามสร้างเวกเตอร์เช่น

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

จากนั้นสร้างลูปเพื่อบันทึกผ่านตัวแปรแต่ละตัว แต่ลูปก็บันทึกเฟรมข้อมูลเป็น "a", "b", "c" ... ฉันต้องการทราบว่ามีวิธีแนบตัวแปรแต่ละตัวเข้ากับ ชื่อที่มีอยู่แล้ว ("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: คุณสามารถจัดเก็บตัวแปรหลายตัวในไฟล์ rda 1 ไฟล์โดย:

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

pseudospin Aug 18 2020 at 03:19

ได้ดูที่?tempfile. สามารถสร้างชื่อไฟล์ที่ไม่ซ้ำกันเพื่อให้คุณใช้