web-dev-qa-db-fra.com

Créer une fonction créée par l'utilisateur dans R

Je suis désolé si cela a déjà été demandé mais je ne trouve pas la réponse.

Disons que j'écris une petite fonction en R

add2<-function(a){
return(a+2)
}

Je l'enregistre sous add2.R dans mon répertoire personnel (ou n'importe quel répertoire). Comment puis-je obtenir R pour le trouver?

> add2(4)
Error: could not find function "add2"

Je sais que je peux ouvrir le script, le copier/coller dans la console, l'exécuter, puis cela fonctionne. Mais comment puis-je l'obtenir intégré afin que si j'ouvre et ferme R, il fonctionne toujours sans que je le copie et le colle?

16
stuppie

Une option légère:

dump("add2", file="myFunction.R")

## Then in a subsequent R session
source("myFunction.R")

Une alternative:

save("add2", file="myFunction.Rdata")

## Then just double click on "myFunction.Rdata" to open  
## an R session with add2() already in it 

## You can also import the function to any other R session with
load("myFunction.Rdata")

Jusqu'à ce que vous soyez prêt à intégrer des fonctions dans votre propre package privé, les stocker dans des fichiers texte source()-ready bien organisés (comme dans le 1er exemple ci-dessus) est probablement la meilleure stratégie. Voir cette question hautement votée SO question ) pour quelques exemples de la façon dont les utilisateurs expérimentés mettent cette approche en pratique.

18
Josh O'Brien

Si vous souhaitez le démarrer automatiquement, vous devez configurer un script de démarrage, puis utiliser l'une des méthodes décrites dans les réponses ci-dessus.

/Library/Frameworks/R.framework/Versions/2.15/Resources/etc/ est (pour mac) l'emplacement de Rprofile.site, qui doit être modifié de manière adéquate.

Ma version est:

.First <- function()
{ 
    dir='~/Desktop/Infobase/R/0_init/0_init.R'
    if(file.exists(dir))
    {
    source(dir, chdir = TRUE) 
    } else {cat("startup file is not found at:",dir)}
    cat("\nWelcome at", date(), "\n")
}    

.Last <- function()
{ 
cat("\nGoodbye at ", date(), "\n")
}

Notez qu'après avoir obtenu le script 1 R, vous n'avez plus besoin de saisir ce fichier. Faites tout ce dont vous avez besoin à partir du fichier que vous avez obtenu. Dans mon cas, le fichier "0_init.R" ne contient aucune fonction, il contient juste le chargement d'autres scripts. Eh bien, vous avez l'idée.

De plus, si vous faites cela, je vous recommande de les stocker dans un nouvel environnement. Les environnements réels ne sont pas vraiment adaptés à vos propres fonctions (ils sont mieux implémentés si vous avez développé un package, sinon vous perdez beaucoup de contrôle).

utilisez "attacher", "détacher", "rechercher", etc ....

attach(FUN,name="af2tr")
4
dgrigonis

Avant d'appeler la fonction (par exemple au début du script), vous devez source le fichier contenant votre/vos fonction (s) définie (s) par l'utilisateur, c'est-à-dire:

source("add2.R") # this executes add2.R script loading add2 function

Fondamentalement, la fonction source exécute le code inclus dans le script passé en argument. Donc, si le fichier ne contient que des définitions de fonctions, il charge la fonction en mémoire pour une utilisation future.

4
digEmAll