1. Grâce à ce formulaire vous pouvez proposer une astuce ou un script sur R.
  2. Votre script doit pouvoir être lancé en l'état. Veuillez penser à :
    • inclure le chargement des "library" nécessaires
    • construire un petit jeu de données si besoin est.
    • commenter les lignes de codes pour en faciliter la compréhension.
  3. Le titre de votre script ou astuce doit être clair et explicite.
  4. Pensez à mettre votre code entre les balises [R] et [/R]; Pour cela, vous pouvez utiliser le bouton

Vous pouvez utiliser vos comptes Facebook, twitter ou google pour vous identifer (google est compatible yahoo, openID...)
L'ideal étant de vous connecter si vous avez un compte utilisateur, ou faire une demande de compte utilisateur si vous n'en avez pas encore.
Créer un compte va vous permettre de pouvoir éditer vos codes et de mettre en avant votre site internet.
Sinon vous pouvez soumettre anonymement en remplissant les champs ci-après.







Choisissez les catégories correspondantes à votre Code:

  • algorithmique
  • Analyse de survie
  • base indispensable
  • bayésien
  • configuration de R
  • exportation de données
  • fonctions utiles
  • graphique
  • importation de données
  • inférence
  • manipulation de données
  • message d'erreur
  • modélisation
  • Non classé
  • optimisation
  • planification
  • programmer avec R
  • regression linéaire
  • Test
  • tidyverse
  • Transformation de données


Comment créer une fonction dans R ? : function

8
dans algorithmique, base indispensable, programmer avec R
R nous donne la possibilité, très pratique, de créer des fonctions personnalisées.
Voici l’architecture globale :
 
 
nomdemafonction<-function(variable1,variable2...)
{
#ici on met le contenu de la fonction (généralement on effectue des transformations aux variables passées en argument)
 
 
 
 
 
return(Variabledesortie)# il s'agit du résultat que va renvoyer la fonction
}
 
#une fois la fonction créée on peut l'utiliser:
 nomdemafonction(varA,varB)
 
 
 


Contrairement à d’autres languages, il n ‘y a pas de contrôle du type de variable que l’on peut utiliser. Il faudra l’inclure dans la fonction pour, par exemple, vérifier que la variable A est bien un vecteur (et pas un data.frame par exemple)

Voici un exemple de fonction, il s’agit d’une fonction simple qui va prendre 2 variables de type « integer » (c’est à dire un chiffre), en faire la somme, en prendre le carré et rajouter la valeur de la première variable.

 
 
monexemple<-function(A,B){
out<-(A+B)^2
out<-out + A
return(out)
}
 
monexemple(2,3)#27
monexemple(8,3)#129
 
 


L’ordre des paramètres est important, il faut les passer dans le même ordre que dans le code de la fonction, ici A puis B.
Il est possible (et même conseillé) de faire autrement en précisant la variable :
 
 
 monexemple(2,3)#27 
 monexemple(3,2)#28
 
 
 monexemple(A=2,B=3)#27
 monexemple(B=3,A=2)#27  
 


Il est possible de définir une valeur par defaut pour certain parametres ( ils deviennent alors optionnel)


 
 
 monexemple2<-function(A,B=10){
out<-(A+B)^2
out<-out + A
return(out)
}
monexemple2(3) #A=3 et B=10
monexemple2(3,10) #A=3 et B=10
monexemple2(3,11) #A=3 et B=11
 
 


Bonus :

Il est possible d’utiliser le symbole « … » dans les paramètres d’une fonction pour indiquer que tous les paramètres supplémentaires seront transmis aux autres fonctions internes.



Proposé par vincent.

Ce script vous à rendu service? remerciez l'auteur en votant ici:
- ça ne sert à rien -- c\'est interessant - (score de +11 sur 15 votes)
Loading ... Loading ...

8 Comments

  1. asso
    Posté le 15 décembre 2011 a 22 h 51 min | Permalink

    Bonjour à tous,
    Je viens de commencer avec R et je souhaite faire tourner une fonction de SUM (x) sur une matrice mais ça ne marche pas, on m’affiche ‘type’ (character) de l’argument incorrect? je ne sais vraiment pas quoi faire, je vous copie le debut de mon script pour que vous puissiez comprendre un peu mieu mon probléme et je remercie tte personne qui pretera attention à ce message de detresse !!

    donnée<-read.csv(« essai.csv »)
    > profil<-function(x){x/sum(x)*100}
    > profil ligne<-apply(essai,1,profil)
    Erreur : symbole inattendu(e) dans « profil ligne »
    > profil.ligne<-apply(donnée,1,profil)
    Erreur dans sum(x) : ‘type’ (character) de l’argument incorrect

    merci d’avance,

    bon courage à tous.

  2. asso
    Posté le 16 décembre 2011 a 6 h 50 min | Permalink

    c’est un tableau tt simple (4col, 4 ligne) en fait c pas des resultat à moi, c juste un essai que je fais pour commencer, pour que je puisse mieux comprendre ce que R fait à chaque instruction !!!!!!!!!!
    profodeur    poly    micro    brilla
    100    4    5    12
    200    12    21    3
    300    45    6    8

    c decalé et je ne sais pas pourqoi?
    merci d’avance
    à plus

  3. Vincent
    Posté le 23 janvier 2012 a 12 h 04 min | Permalink

    a priori vous etes en train de faire un sum des titre de vos colonnes.
    vous le demandez de faire profondeur  +poly + micro +brilla. le ejux de donéne que vous donnez ne dois contenir que des valeur, ou alors vous devez modifier la fonction profil

  4. Guillaume
    Posté le 23 janvier 2012 a 12 h 56 min | Permalink

    Bonjour faites un summary(donnée) et vérifier que votre que vos données sont bien en numeric et non converti en factor qui ne peut évidement pas être utiliser avec sum() (d’ou l’erreur type « character » de l’argument incorrect)

  5. Yacine
    Posté le 17 juillet 2015 a 12 h 52 min | Permalink

    J’ai l’impression que les fonctions ne prennent que les variables toutes seules, c’est dommage.Par exemple si on veut macher notre travail pour un chi2 amélioré, on ne peut pas faire :

    qui2=function(varA,varB){out=chisq.test(data$varA,data$varB,simulate.p.value=TRUE,B=2000)return(out)} 
     
    qui2(varA,varB)

    car l’objet compris dans la fonction est « data$varA » et non « data$ »varA. C’est comme ça que le logiciel le comprend.J’ai également essayé :l

    qui2=function(table,varA,varB){out=chisq.test(table$varA,table$varB,simulate.p.value=TRUE,B=2000)return(out)}
     
    qui2(data,varA,varB)
     
    #mais cela ne marche pas nomplus.Du coup on est obligé de faire : 
     
    qui2=function(varA,varB){out=chisq.test(varA,varB,simulate.p.value=TRUE,B=2000)return(out)} 
     
    qui2(data$varA,data$varB)

    Connaissez-vous une astuce pour contourner ce problème ?

  6. Vincent
    Posté le 18 juillet 2015 a 6 h 04 min | Permalink

    @yacine la premiere solution, va s’appliquer sur un objet data qui n’est pas pasé en parametre, c’est possible, R nous laisse le faire mais c ‘est plutot dangeureux, puisque la lancement de la meme instruction donnera des réponses différentes en fonction de l’environnement de travail.

    le symbol $ ne survit pas tres bien dasn les fonction, il vau tmieux utiliser les double [[ :

     
    qui2=function(varA,varB){
     #out=chisq.test(data$varA,data$varB,simulate.p.value=TRUE,B=2000)
     out=chisq.test(data[[varA]],data[[varB]],simulate.p.value=TRUE,B=2000)
     return(out)}
    data<-iris
    qui2("Sepal.Length","pepal.Length")
     
     

     

    mais je préfere cette facon de faire :

     
    rm(list=ls())
    qui2=function(data,varA,varB){
     #out=chisq.test(data$varA,data$varB,simulate.p.value=TRUE,B=2000)
     out=chisq.test(data[[varA]],data[[varB]],simulate.p.value=TRUE,B=2000)
    out
    }
    qui2(iris,"Sepal.Length","pepal.Length")
     
     
  7. Vincent
    Posté le 18 juillet 2015 a 6 h 07 min | Permalink

    eu pui vaut mieux tard que jamais :

    @asso :

    apply bosse sur des matrice, il suffit qu’une des varaible de essai soit de type facteur ou character pour que tout soit passé en charactere. tout se passe comme si apply faisait :

     
    as.matrix(donnée)
     
  8. ayatbad
    Posté le 5 août 2016 a 20 h 30 min | Permalink

    Bonjour à tous,Alors moi je suis un bébé dans les stats avec R surtout dans la programmation.En effet, je voudrais effectuer un t-test entre deux groupes A et B.Chacun de ces groupes comporte 3 répliques chacun (A1 A2 A3, B1, B2, B3) et j’ai 1032 lignes à comprarer,obtenir les résultats de t-test pour les 1032 lignes, les p-value et la différence pou chaque ligneJ’ai commencé par lire les tutos mais je ne m’en sors pas encore ou je ne suis pas encore tombé sur le bonUn sage conseil de votre part me serait d’une grande utilitéMerci par avanceAyatbad

Poster un commentaire


Votre email ne seras jamais communiqué champs requis désigné par une *

*
*


deux + = 5

Formation logiciel R