Définissez toutes les fonctions dans un fichier .R, appelez-les à partir d'un autre fichier .R. Comment, si possible?

93

Comment appeler des fonctions définies dans le fichier abc.R dans un autre fichier, par exemple xyz.R?

Une question supplémentaire est: comment appeler les fonctions définies dans abc.R à partir de l'invite / de la ligne de commande R?

G Shah
la source

Réponses:

137

Vous pouvez appeler source("abc.R")suivi de source("xyz.R")(en supposant que ces deux fichiers se trouvent dans votre répertoire de travail actuel.

Si abc.R est:

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

et xyz.R est:

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

alors cela fonctionnera:

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

Même s'il existe des dépendances cycliques, cela fonctionnera.

Par exemple, si abc.R est ceci:

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

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

et xyz.R est ceci:

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

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

puis,

> source("abc.R")
> source("xyz.R")
> fooXYZ(3) 
[1] 55
>
A_K
la source
9
Une nuance: vous n'avez à sourceun fichier / fonction qu'une seule fois. Ensuite, il est dans votre espace de travail et vous pouvez l'utiliser à tout moment. Si vous le modifiez, vous devez le ressourcer. Si vos fonctions changent beaucoup depuis que vous convertissez le code, mettez-les toutes dans un seul fichier et sourcez le tout à chaque fois. Vous pouvez également avoir un fichier plus petit séparé qui 1. source la plus grande collection de fonctions et 2. Exécute vos cas de test. Dans R, il existe de nombreuses façons d'organiser votre flux de travail.
Bryan Hanson
5
Merci pour la nuance, Bryan. Je montrais cela sous forme de 2 scénarios sur lesquels la plupart des gens de langages procéduraux pourraient s'interroger. C'est comme si les fichiers avaient été modifiés pour ajouter la dépendance cyclique, auquel cas ils doivent être dotés de ressources (comme indiqué) et les cycles n'affectent pas la provenance des fichiers.
A_K
Merci à vous deux. @A_K: merci beaucoup d'avoir mis en évidence le problème de dépendance cyclique. M'a sauvé quelques heures de fouille dans la documentation R «peut être améliorée» :)
G Shah