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?

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
>

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.