Les posteurs les plus actifs de la semaine
c@ssoulet
Créer une fonction R Vote_lcapCréer une fonction R Voting_barCréer une fonction R Vote_rcap 


Créer une fonction R

Aller en bas

Créer une fonction R Empty Créer une fonction R

Message par zezima le Ven 17 Juil 2015 - 13:09

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 :
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
zezima

Nombre de messages : 908
Date d'inscription : 26/02/2013

Revenir en haut Aller en bas

Créer une fonction R Empty Re: Créer une fonction R

Message par joyeux_lapin13 le Lun 20 Juil 2015 - 5:45

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?
joyeux_lapin13
joyeux_lapin13

Nombre de messages : 1925
Age : 36
Localisation : Mayotte
Date d'inscription : 21/04/2010

https://lemakistatheux.wordpress.com/

Revenir en haut Aller en bas

Créer une fonction R Empty Re: Créer une fonction R

Message par zezima le Mar 21 Juil 2015 - 9:25

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.

zezima
zezima

Nombre de messages : 908
Date d'inscription : 26/02/2013

Revenir en haut Aller en bas

Créer une fonction R Empty Re: Créer une fonction R

Message par A.D. le Mer 29 Juil 2015 - 16:11

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 :

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 ! Smile


A.D.

A.D.

Nombre de messages : 305
Age : 31
Localisation : Nantes
Date d'inscription : 02/12/2009

http://www.dacta.fr

Revenir en haut Aller en bas

Créer une fonction R Empty Re: Créer une fonction R

Message par Léon T le Jeu 30 Juil 2015 - 11:35

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...

Code:
table[,dimnames(table)[[2]]=varA]

Léon T

Nombre de messages : 13
Date d'inscription : 30/07/2015

Revenir en haut Aller en bas

Créer une fonction R Empty Re: Créer une fonction R

Message par zezima le Ven 31 Juil 2015 - 9:40

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.

Code:

Erreur dans UseMethod("select_") :
pas de méthode pour 'select_' applicable pour un objet de classe "function"

zezima
zezima

Nombre de messages : 908
Date d'inscription : 26/02/2013

Revenir en haut Aller en bas

Créer une fonction R Empty Re: Créer une fonction R

Message par Léon T le Ven 31 Juil 2015 - 9:52

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

Revenir en haut Aller en bas

Créer une fonction R Empty Re: Créer une fonction R

Message par zezima le Ven 31 Juil 2015 - 9:54

Euh oui je te remercie, je sais comment installer un package c'est déjà fait...
zezima
zezima

Nombre de messages : 908
Date d'inscription : 26/02/2013

Revenir en haut Aller en bas

Créer une fonction R Empty Re: Créer une fonction R

Message par zezima le Ven 31 Juil 2015 - 10:25

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 :

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
zezima

Nombre de messages : 908
Date d'inscription : 26/02/2013

Revenir en haut Aller en bas

Créer une fonction R Empty Re: Créer une fonction R

Message par jeremyJ le Ven 31 Juil 2015 - 12:00

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

jeremyJ

Nombre de messages : 78
Date d'inscription : 09/09/2014

Revenir en haut Aller en bas

Créer une fonction R Empty Re: Créer une fonction R

Message par zezima le Ven 31 Juil 2015 - 12:03

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
zezima
zezima

Nombre de messages : 908
Date d'inscription : 26/02/2013

Revenir en haut Aller en bas

Créer une fonction R Empty Re: Créer une fonction R

Message par jeremyJ le Ven 31 Juil 2015 - 12:14

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.. :
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

Revenir en haut Aller en bas

Créer une fonction R Empty Re: Créer une fonction R

Message par zezima le Ven 31 Juil 2015 - 12:19

Génial !
ça marche bien !

Merci

ps : table, data peuvent également être utilisés dans la fonction
zezima
zezima

Nombre de messages : 908
Date d'inscription : 26/02/2013

Revenir en haut Aller en bas

Créer une fonction R Empty Re: Créer une fonction R

Message par jeremyJ le Ven 31 Juil 2015 - 12:28

zezima a écrit:Génial !
ça marche bien !

Merci
Parfait !
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

Revenir en haut Aller en bas

Créer une fonction R Empty Re: Créer une fonction R

Message par zezima le Ven 31 Juil 2015 - 13:15

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
zezima

Nombre de messages : 908
Date d'inscription : 26/02/2013

Revenir en haut Aller en bas

Créer une fonction R Empty Re: Créer une fonction R

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum