มีฟังก์ชัน R / ลูปที่สามารถเพิ่มหมายเลขเฉพาะหรือสตริงให้กับชื่อไฟล์ได้หรือไม่
ฉันยังใหม่กับ 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" ... )
ฉันไม่ได้เจาะจงเกี่ยวกับวิธีการใด ๆ ตราบเท่าที่มันได้ผล
คำตอบ
สมมติว่าฉันมีไดเร็กทอรีดังนี้:
/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())
ซึ่งจะบันทึกลงในไฟล์ที่เพิ่มขึ้นถัดไป เนื่องจากฟังก์ชันจะตรวจสอบไดเร็กทอรีทุกครั้งฟังก์ชันจะเขียนไปยังไฟล์ใหม่โดยกำหนดหมายเลขให้เหมาะสมเสมอ
ฉันจะตรวจสอบการมีอยู่ของชื่อไฟล์ หากมีอยู่ให้สร้างกลไกการจัดเรียงเพื่อสร้างชื่อไฟล์ใหม่ ไม่ว่าจะเป็นสตริงที่สร้างขึ้นแบบสุ่มหรือระบบตัวเลข
FYI: คุณสามารถจัดเก็บตัวแปรหลายตัวในไฟล์ rda 1 ไฟล์โดย:
> save(data1, data2, data3, file = "data.rda")
ได้ดูที่?tempfile
. สามารถสร้างชื่อไฟล์ที่ไม่ซ้ำกันเพื่อให้คุณใช้