Definisci tutte le funzioni in un file .R, chiamale da un altro file .R. Come, se possibile?


93

Come posso chiamare le funzioni definite nel file abc.R in un altro file, ad esempio xyz.R?

Una domanda supplementare è: come posso chiamare le funzioni definite in abc.R dal prompt R / dalla riga di comando?

Risposte:


137

Puoi chiamare source("abc.R")seguito da source("xyz.R")(assumendo che entrambi questi file si trovino nella tua directory di lavoro corrente.

Se abc.R è:

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

e xyz.R è:

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

allora questo funzionerà:

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

Anche se ci sono dipendenze cicliche, funzionerà.

Ad esempio, se abc.R è questo:

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

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

e xyz.R è questo:

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

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

poi,

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

9
Una sfumatura: devi solo sourceun file / funzione una volta. Quindi è nel tuo spazio di lavoro e puoi usarlo in qualsiasi momento. Se lo modifichi, devi reimpostarlo. Se le tue funzioni stanno cambiando molto da quando stai convertendo il codice, mettile tutte in un unico file e procurati semplicemente tutto ogni volta. Si potrebbe anche avere un file più piccolo separato che 1. fornisce la raccolta più ampia di funzioni e 2. esegue i test case. In R ci sono molti modi per organizzare il flusso di lavoro.
Bryan Hanson

5
Grazie per la sfumatura, Bryan. Stavo dimostrando questo come 2 scenari che la maggior parte delle persone dai linguaggi procedurali potrebbe chiedersi. È come se i file fossero stati modificati per aggiungere la dipendenza ciclica, nel qual caso è necessario creare risorse (come mostrato) ei cicli non influiscono sull'origine dei file.
A_K

Grazie a tutti e due. @A_K: grazie mille per aver evidenziato il problema della dipendenza ciclica. Mi ha fatto risparmiare alcune ore di ricerca nella documentazione R "può essere migliorata" :)
G Shah
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.