Tentukan semua fungsi dalam satu file .R, panggil dari file .R lain. Bagaimana jika memungkinkan?

95

Bagaimana cara memanggil fungsi yang ditentukan dalam file abc.R di file lain, katakanlah xyz.R?

Pertanyaan tambahannya adalah, bagaimana cara memanggil fungsi yang ditentukan dalam abc.R dari baris perintah / perintah R?

G Shah
sumber

Jawaban:

141

Anda dapat memanggil source("abc.R")diikuti oleh source("xyz.R")(dengan asumsi bahwa kedua file ini ada di direktori kerja Anda saat ini.

Jika abc.R adalah:

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

dan xyz.R adalah:

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

maka ini akan berhasil:

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

Bahkan jika ada ketergantungan siklis, ini akan berhasil.

Misalnya jika abc.R adalah ini:

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

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

dan xyz.R adalah ini:

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

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

kemudian,

> source("abc.R")
> source("xyz.R")
> fooXYZ(3) 
[1] 55
>
A_K
sumber
10
Nuansa: Anda hanya perlu sourcesatu file / fungsi sekali. Lalu ada di ruang kerja Anda dan Anda dapat menggunakannya kapan saja. Jika Anda mengubahnya, Anda harus mengambilnya kembali. Jika fungsi Anda banyak berubah sejak Anda mengonversi kode, letakkan semuanya dalam satu file dan cukup sumber semuanya setiap saat. Anda juga dapat memiliki file terpisah yang lebih kecil yang 1. mengambil sumber dari koleksi fungsi yang lebih besar dan 2. Menjalankan kasus pengujian Anda. Di R ada banyak cara untuk mengatur alur kerja Anda.
Bryan Hanson
5
Terima kasih untuk nuansanya, Bryan. Saya mendemonstrasikan ini sebagai 2 skenario yang mungkin ditanyakan oleh kebanyakan orang dari bahasa prosedural. Seolah-olah file tersebut diedit untuk menambahkan ketergantungan siklik, dalam hal ini file tersebut perlu sumber daya (seperti yang ditunjukkan) & siklus tidak memengaruhi sumber file.
A_K
Terima kasih kalian berdua. @A_K: terima kasih banyak telah menyoroti masalah ketergantungan siklik. Menghemat beberapa jam saya untuk menggali dokumentasi R yang "dapat ditingkatkan" :)
G Shah