Defina todas las funciones en un archivo .R, llámelas desde otro archivo .R. ¿Cómo, si es posible?

93

¿Cómo llamo a las funciones definidas en el archivo abc.R en otro archivo, digamos xyz.R?

Una pregunta complementaria es, ¿cómo llamo a las funciones definidas en abc.R desde la línea de comandos / indicador de R?

G Shah
fuente

Respuestas:

137

Puede llamar source("abc.R")seguido de source("xyz.R")(asumiendo que ambos archivos están en su directorio de trabajo actual.

Si abc.R es:

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

y xyz.R es:

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

entonces esto funcionará:

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

Incluso si hay dependencias cíclicas, esto funcionará.

Por ejemplo, si abc.R es este:

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

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

y xyz.R es este:

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

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

luego,

> source("abc.R")
> source("xyz.R")
> fooXYZ(3) 
[1] 55
>
ALASKA
fuente
9
Un matiz: solo tienes que hacer sourceun archivo / función una vez. Entonces está en su espacio de trabajo y puede usarlo en cualquier momento. Si lo cambia, debe volver a obtenerlo. Si sus funciones están cambiando mucho desde que está convirtiendo el código, colóquelas todas en un archivo y solo obtenga la fuente completa cada vez. También podría tener un archivo más pequeño separado que 1. obtenga la colección más grande de funciones y 2. Ejecute sus casos de prueba. En R hay muchas formas de organizar su flujo de trabajo.
Bryan Hanson
5
Gracias por el matiz, Bryan. Estaba demostrando esto como 2 escenarios sobre los que la mayoría de las personas de lenguajes procedimentales podrían preguntarse. Es como si los archivos se hubieran editado para agregar la dependencia cíclica, en cuyo caso es necesario dotarlos de recursos (como se muestra) y los ciclos no afectan el origen de los archivos.
A_K
Gracias a los dos. @A_K: muchas gracias por destacar el problema de la dependencia cíclica. Me ahorró algunas horas de búsqueda en la documentación de R "se puede mejorar" :)
G Shah