Les posteurs les plus actifs de la semaine
Aucun utilisateur |
Sujets les plus vus
Créer une fonction R
5 participants
Page 1 sur 1
Créer une fonction R
Bonjour,
J'aimerais créer une fonction qui crée un Chi2 entre deux variables en fonction d'une base de donnée précise.
J'aimerais que la fonction repère les deux variables, ainsi que la table utilisée.
(Précision : ma base de données s'appelle "data").
J'ai essayé deux codes qui ne fonctionnent pas :
et
Le seul code qui marche est le suivant, mais il m'oblige à préciser le nom de la table devant la variable que j'utilise dans l'utilisation de la fonction :
Auriez-vous une idée pour contourner ce problème ?
Merci d'avance
J'aimerais créer une fonction qui crée un Chi2 entre deux variables en fonction d'une base de donnée précise.
J'aimerais que la fonction repère les deux variables, ainsi que la table utilisée.
(Précision : ma base de données s'appelle "data").
J'ai essayé deux codes qui ne fonctionnent pas :
- Code:
qui2=function(table,varA,varB){
out=chisq.test(table$varA,table$varB,simulate.p.value=TRUE,B=2000)
return(out)
}
qui2(data,Pays,Sexe)
Erreur dans chisq.test(table$varA, table$varB, simulate.p.value = TRUE, B = 2000) :
at least one entry of 'x' must be positive
De plus : Message d'avis :
In is.na(x) :
is.na() appliqué à un objet de type 'NULL' qui n'est ni une liste, ni un vecteur
et
- Code:
qui2=function(varA,varB){
out=chisq.test(data$varA,data$varB,simulate.p.value=TRUE,B=2000)
return(out)
}
qui2(Pays,Sexe)
#Même message d'erreur
Le seul code qui marche est le suivant, mais il m'oblige à préciser le nom de la table devant la variable que j'utilise dans l'utilisation de la fonction :
- Code:
qui2=function(varA,varB){
out=chisq.test(varA,varB,simulate.p.value=TRUE,B=2000)
return(out)
}
qui2(data$Pays,data$Sexe)
#Pas de message d'erreur
Auriez-vous une idée pour contourner ce problème ?
Merci d'avance
zezima- Nombre de messages : 939
Date d'inscription : 26/02/2013
Re: Créer une fonction R
Salut Zezima,
Je comprends pas ce que tu veux faire en fait... tu veux que ton code distingue directement les variables qualitatives et applique un chi2 sur tous les croisements possibles?
Je comprends pas ce que tu veux faire en fait... tu veux que ton code distingue directement les variables qualitatives et applique un chi2 sur tous les croisements possibles?
Re: Créer une fonction R
Salut Joyeux_lapin,
En faite je cherche à ce que l'objet "table" soit utilisé comme variable dans ma fonction "qui2".
J'ai envie, lorsque je lance ma fonction "qui2", de ne devoir écrire que "qui2(data,Pays,Sexe)" ou "qui2(Pays,Sexe)", plutôt que "qui2(data$Pays,data$Sexe)".
Mon but est de gagner de la place dans l'utilisation de ma fonction. C'est cosmétique mais ça m'aiderait beaucoup pour les boucles de codage que je lance.
En faite je cherche à ce que l'objet "table" soit utilisé comme variable dans ma fonction "qui2".
J'ai envie, lorsque je lance ma fonction "qui2", de ne devoir écrire que "qui2(data,Pays,Sexe)" ou "qui2(Pays,Sexe)", plutôt que "qui2(data$Pays,data$Sexe)".
Mon but est de gagner de la place dans l'utilisation de ma fonction. C'est cosmétique mais ça m'aiderait beaucoup pour les boucles de codage que je lance.
zezima- Nombre de messages : 939
Date d'inscription : 26/02/2013
Re: Créer une fonction R
Bonjour zezima,
Il y a sûrement plusieurs manières de faire mais une qui me vient à l'esprit spontanément est d'avoir recours au package "dplyr", avec quelque chose du style :
Si besoin, plus de détails sur les fonctions de ce package : https://www.rstudio.com/wp-content/uploads/2015/02/data-wrangling-cheatsheet.pdf
HTH !
A.D.
Il y a sûrement plusieurs manières de faire mais une qui me vient à l'esprit spontanément est d'avoir recours au package "dplyr", avec quelque chose du style :
- Code:
library(dplyr)
qui2=function(table,varA,varB){
out=chisq.test( select(table, varA), select(table, varB), simulate.p.value=TRUE, B=2000)
return(out)
}
Si besoin, plus de détails sur les fonctions de ce package : https://www.rstudio.com/wp-content/uploads/2015/02/data-wrangling-cheatsheet.pdf
HTH !
A.D.
Re: Créer une fonction R
Salut,
En fait, dans ta fonction, c'est ton "table$varA" qui pose problème. R va chercher une colonne intitulée varA dans data, au lieu d'aller chercher 'Pays'. Puisqu'elle n'existe pas, il renvoie NULL de cette expression... Sans dplyr, tu aurais été obligé de remplacé ça par...
En fait, dans ta fonction, c'est ton "table$varA" qui pose problème. R va chercher une colonne intitulée varA dans data, au lieu d'aller chercher 'Pays'. Puisqu'elle n'existe pas, il renvoie NULL de cette expression... Sans dplyr, tu aurais été obligé de remplacé ça par...
- Code:
table[,dimnames(table)[[2]]=varA]
Léon T- Nombre de messages : 13
Date d'inscription : 30/07/2015
Re: Créer une fonction R
Bonjour,
Merci pour vos idées de codes !
Pour le coup j'ai essayé d'intégrer la fonction "Select" dans une fonction mais R ne semble pas apprécier.
Merci pour vos idées de codes !
Pour le coup j'ai essayé d'intégrer la fonction "Select" dans une fonction mais R ne semble pas apprécier.
- Code:
Erreur dans UseMethod("select_") :
pas de méthode pour 'select_' applicable pour un objet de classe "function"
zezima- Nombre de messages : 939
Date d'inscription : 26/02/2013
Re: Créer une fonction R
La fonction select appartient au package "dplyr", pour l'utiliser, il faut charger le package...
Léon T- Nombre de messages : 13
Date d'inscription : 30/07/2015
Re: Créer une fonction R
Euh oui je te remercie, je sais comment installer un package c'est déjà fait...
zezima- Nombre de messages : 939
Date d'inscription : 26/02/2013
Re: Créer une fonction R
C'est très étrange, j'ai compris ton code A.D. mais la fonction n'a pas l'air de reconnaître les variables.
J'ai modifié le code de cette manière :
Pourtant lorsque je lance mon code (le chi2) avec les variables définies, tout marche bien :
J'avoue ne pas comprendre
J'ai modifié le code de cette manière :
- Code:
qui2=function(table,varA,varB){
out=chisq.test( select(table, varA)[,1], select(table, varB)[,1], simulate.p.value=TRUE, B=2000)
return(out)
}
qui2(data,Sexe,Pays)
Erreur dans eval(expr, envir, enclos) : objet 'Sexe' introuvable
Pourtant lorsque je lance mon code (le chi2) avec les variables définies, tout marche bien :
- Code:
chisq.test(select(data,Sexe)[,1],select(data,Pays)[,1],simulate.p.value=TRUE,B=2000)
#Tout marche bien
J'avoue ne pas comprendre
zezima- Nombre de messages : 939
Date d'inscription : 26/02/2013
Re: Créer une fonction R
Bonjour,
Peut-etre que comme "table" est une fonction existante, R n'apprécie pas qu'on s'en serve comme non de variable, essaye de remplacer table par autre chose...
Cordialement
Peut-etre que comme "table" est une fonction existante, R n'apprécie pas qu'on s'en serve comme non de variable, essaye de remplacer table par autre chose...
Cordialement
jeremyJ- Nombre de messages : 78
Date d'inscription : 09/09/2014
Re: Créer une fonction R
Bonne idée mais non, j'ai toujours le même message d'erreur. La création de la fonction ne bug pas mais son utilisation oui.
Erreur dans eval(expr, envir, enclos) : objet 'Sexe' introuvable
Erreur dans eval(expr, envir, enclos) : objet 'Sexe' introuvable
zezima- Nombre de messages : 939
Date d'inscription : 26/02/2013
Re: Créer une fonction R
Arf..
Néanmoins je te conseil de changer quand meme le "table" et je dirais de même pour le "data" qui est aussi une fonction de R.
J'ai pas résolu ton soucis mais je pense avoir trouvé une alternative.. :
Néanmoins je te conseil de changer quand meme le "table" et je dirais de même pour le "data" qui est aussi une fonction de R.
J'ai pas résolu ton soucis mais je pense avoir trouvé une alternative.. :
- Code:
qui2=function(donnee,varA,varB){
out=chisq.test( donnee[,varA], donnee[,varB], simulate.p.value=TRUE, B=2000)
return(out)
}
qui2(jeuDedonnee,"Sexe","Pays")
jeremyJ- Nombre de messages : 78
Date d'inscription : 09/09/2014
Re: Créer une fonction R
Génial !
ça marche bien !
Merci
ps : table, data peuvent également être utilisés dans la fonction
ça marche bien !
Merci
ps : table, data peuvent également être utilisés dans la fonction
zezima- Nombre de messages : 939
Date d'inscription : 26/02/2013
Re: Créer une fonction R
Parfait !zezima a écrit:Génial !
ça marche bien !
Merci
Autre alternative plus complexe : regarder du coté des fonctions eval() et parse()
zezima a écrit:
ps : table, data peuvent également être utilisés dans la fonction
Oui les noms de fonctions qui existent peuvent être utilisées comme nom de variable mais ce n'est jamais très conseillé,
Certains messages d'erreurs peuvent venir de là, penses-y !
jeremyJ- Nombre de messages : 78
Date d'inscription : 09/09/2014
Re: Créer une fonction R
Pour ceux qui sont intéressés par ce type de fonction, si vous n'avez qu'une base de donnée (comme moi), vous pouvez simplifier le code avec seulement 2 objets
- Code:
qui2=function(varA,varB){
out=chisq.test( data[,varA], data[,varB], simulate.p.value=TRUE, B=2000)
return(out)
}
qui2("Pays","Sexe")
zezima- Nombre de messages : 939
Date d'inscription : 26/02/2013
Sujets similaires
» Créer un répertoire
» creer une carte
» Créer des objets différents dans une boucle
» Créer une liste de matrices
» Méthodes pour créer des seuils sur variables numériques
» creer une carte
» Créer des objets différents dans une boucle
» Créer une liste de matrices
» Méthodes pour créer des seuils sur variables numériques
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum