กำหนดฟังก์ชันทั้งหมดในไฟล์. R ไฟล์เดียวเรียกใช้จากไฟล์. R อื่น อย่างไรถ้าเป็นไปได้?


95

ฉันจะเรียกฟังก์ชันที่กำหนดในไฟล์ abc.R ในไฟล์อื่นพูด xyz.R ได้อย่างไร

คำถามเสริมคือฉันจะเรียกฟังก์ชันที่กำหนดใน abc.R จาก R prompt / command line ได้อย่างไร

คำตอบ:


141

คุณสามารถเรียกsource("abc.R")ตามด้วยsource("xyz.R")(สมมติว่าไฟล์ทั้งสองนี้อยู่ในไดเร็กทอรีการทำงานปัจจุบันของคุณ

ถ้า abc.R คือ:

fooABC <- function(x) {
    k <- x+1
    return(k)
}

และ xyz.R คือ:

fooXYZ <- function(x) {
    k <- fooABC(x)+1
    return(k)
}

จากนั้นจะใช้งานได้:

> source("abc.R")
> source("xyz.R")
> fooXYZ(3)
[1] 5
> 

แม้ว่าจะมีการอ้างอิงแบบวัฏจักรสิ่งนี้ก็จะใช้ได้

เช่นถ้า abc.R คือสิ่งนี้:

fooABC <- function(x) {
    k <- barXYZ(x)+1
    return(k)
}

barABC <- function(x){
    k <- x+30
    return(k)
}

และ xyz.R คือ:

fooXYZ <- function(x) {
    k <- fooABC(x)+1
    return(k)
}

barXYZ <- function(x){
    k <- barABC(x)+20
    return(k)
}

จากนั้น

> source("abc.R")
> source("xyz.R")
> fooXYZ(3) 
[1] 55
>

10
ความแตกต่างเล็กน้อย: คุณต้องsourceใช้ไฟล์ / ฟังก์ชันเพียงครั้งเดียว จากนั้นจะอยู่ในพื้นที่ทำงานของคุณและคุณสามารถใช้งานได้ตลอดเวลา หากคุณเปลี่ยนคุณต้องจัดหาแหล่งข้อมูลใหม่ หากฟังก์ชันของคุณมีการเปลี่ยนแปลงอย่างมากเนื่องจากคุณกำลังแปลงรหัสให้รวมไว้ในไฟล์เดียวและสร้างข้อมูลทั้งหมดทุกครั้ง คุณยังสามารถมีไฟล์ขนาดเล็กแยกต่างหากซึ่ง 1. แหล่งที่มาของคอลเลกชันของฟังก์ชันขนาดใหญ่และ 2. เรียกใช้กรณีทดสอบของคุณ ใน R มีหลายวิธีในการจัดเรียงลำดับงานของคุณ
Bryan Hanson

5
ขอบคุณสำหรับความแตกต่างเล็กน้อยไบรอัน ฉันแสดงให้เห็นว่านี่เป็น 2 สถานการณ์ที่คนส่วนใหญ่จากภาษาขั้นตอนอาจสงสัย เหมือนกับว่าไฟล์ได้รับการแก้ไขเพื่อเพิ่มการขึ้นต่อกันของวงจรซึ่งในกรณีนี้จำเป็นต้องมีการจัดหาทรัพยากร (ตามที่แสดง) และรอบจะไม่ส่งผลต่อการจัดหาไฟล์
A_K

ขอบคุณทั้งสองท่าน @A_K: ขอบคุณมากสำหรับการเน้นปัญหาการพึ่งพาวงจร ช่วยฉันได้หลายชั่วโมงในการขุดผ่านเอกสาร R "สามารถปรับปรุงได้" :)
G Shah
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.