2012-11-25 14 views

risposta

88

È possibile chiamare source("abc.R") seguito da source("xyz.R") (assumendo che entrambi questi file sono nella 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 lavoro:

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

Anche se ci sono delle dipendenze cicliche, questo funzionerà.

E.g. Se abc.R è questo:

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

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

e xyz.R è questa:

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 
> 
+7

Una sfumatura: devi solo' sorgente' un file/funzione una volta. Quindi è nel tuo spazio di lavoro e puoi usarlo in qualsiasi momento. Se lo cambi, devi ri-source. Se le tue funzioni stanno cambiando molto dal momento che stai convertendo il codice, mettili tutti in un unico file e fai sempre il punto ogni volta. Si potrebbe anche avere un file separato più piccolo che 1. fornisce la più ampia raccolta di funzioni e 2. Esegue i casi di test. In R ci sono molti modi per organizzare il flusso di lavoro. –

+4

Grazie per la sfumatura, Bryan. Lo stavo dimostrando come 2 scenari di cui la maggior parte delle persone provenienti da linguaggi procedurali potrebbe chiedersi. È come se i file fossero modificati per aggiungere la dipendenza ciclica, nel qual caso hanno bisogno di risorse (come mostrato) e i cicli non influiscono sul sourcing dei file. –

+0

Grazie a tutti e due. @A_K: grazie mille per evidenziare il problema della dipendenza ciclica. Mi ha risparmiato alcune ore di scavare nella documentazione R "può essere migliorata" :) –

Problemi correlati