IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

R Discussion :

Passage entre script et fonction


Sujet :

R

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 173
    Par défaut Passage entre script et fonction
    Bonjour,

    J'ai un soucis car je n'arrive pas à faire passer mes deux objets data et modele dans une fonction que j'ai écrite.

    Alors qu'en copiant les lignes de la fonction dans la commande, tout marche.

    Voici le main :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    source("mon chemin de la fonction backtest")	
     
    data_modelisation=read.table("mon chemin",header=TRUE, sep="\t", na.strings="NA", dec=",", strip.white=TRUE)	
    modele=glm(RA ~ varA varB ,family=binomial(logit), data=data_modelisation)
     
    data=read.table("chemin",header=TRUE, sep="\t", na.strings="NA", dec=",", strip.white=TRUE)
    backtest(data,modele)
    Et la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Backtest = function (modele,data)
    {
     
    		#Prévision des probabilités
    		prevision=predict(modele,newdata=data,type="response")
    		data$prevision <- with(data, prevision)
    		summary(data)
     
    		#Prévision des modalités
    		pred.moda <- factor(ifelse(prevision > 0.5,1,0))
    		data$pred.moda <- with(data, pred.moda)
     
    		RA_nb_model=sum(data$prevision)/(12*length(data$prevision)) 
    		RA_nb_reel=sum(data$RA)/length(data$prevision)
     
    		resultat =c(RA_nb_model,RA_nb_reel)
    		return(resultat)
     
     
     
    }
    Merci à ceux qui pourront m'aider

  2. #2
    Membre chevronné
    Inscrit en
    Mars 2013
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Mars 2013
    Messages : 208
    Par défaut
    Bonjour,

    Citation Envoyé par Stepsbysteps Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Backtest = function (modele,data)
    {
     
    		#Prévision des probabilités
    		prevision=predict(modele,newdata=data,type="response")
    		<s>data$prevision <- with(data, prevision)</s>		summary(data)
     
    		#Prévision des modalités
    		pred.moda <- factor(ifelse(prevision > 0.5,1,0))
    		<s>data$pred.moda <- with(data, pred.moda)</s>
    		RA_nb_model=sum(<s>data$</s>prevision)/(12*length(<s>data$</s>prevision)) 
    		RA_nb_reel=sum(data$RA)/length(<s>data$</s>prevision)
     
    		resultat =c(RA_nb_model,RA_nb_reel)
    		return(resultat)
     
     
    }
    Merci à ceux qui pourrront m'aider
    De rien

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 173
    Par défaut
    Merci mais j'ai encore cette erreur,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pas de méthode pour 'predict' applicable pour un objet de classe "data.frame"
    Et pourquoi ne peut-on pas mettre ces lignes dans le code ?

    J'avais aussi cette manipulation que je n'avais pas affichée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #Passe les variables en facteur
    for (i in 4:16) data[,i] = factor(data[,i])

  4. #4
    Membre chevronné
    Inscrit en
    Mars 2013
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Mars 2013
    Messages : 208
    Par défaut
    Citation Envoyé par Stepsbysteps Voir le message
    Merci mais j'ai encore cette erreur,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pas de méthode pour 'predict' applicable pour un objet de classe "data.frame"
    Cette erreur signifie comme elle le décrit bien qu'au lieu d'appliquer la fonction predict à un modèle, tu l'a appliqué à... un data.frame!
    La seule explication est que tu as du te tromper dans l'ordre de tes paramètres quand tu as appellé la fonction! Je regarde et....

    Effectivement je voir l'erreur dans ta main que je n'avais pas regardé

    La declaration de la fonction est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Backtest = function (modele,data)
    Or dans ta main tu appelles backtest par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    backtest(data,modele)
    Donc tu t'es trompé dans le sens des paramètres, et R comprend :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Backtest(modele=data,data=modele)
    D'où l'erreur.


    Et pourquoi ne peut-on pas mettre ces lignes dans le code ?
    Parce qu'elles sont inutiles et que l'emploi de with est totalement injustifié.
    Cela dit après coup peut être que ce n'était pas ca qui faisait bugger mais juste le changement de sens des paramètres donc autant pour moi!

    Mais il faut bien comprendre que with sert à travailler sur les variables d'un environnement (ici ton data frame data).
    Donc quand tu fais with(data, unautretrucpasdansdata) au mieux ca equivaut à unautretrucpasdansdata, au pire ca peut te faire bugger ton programme.


    edit: Au passage attention, car nommer tes paramètres appellés comme les paramètres de ta fonction (data=data) est susceptible de produire des bugs si tu retravailles ce paramètre après dans ta fonction ( ca peut parfois poser des problèmes d'environement quand tu imbriques des fonctions entre elles, et c'est d'ailleurs pour ca que je me suis dis que le with(data,) arrangeait pas trop les choses ^^)

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 173
    Par défaut
    Ah! Super merci, j'ai été un peu découragé mais pourtant j'étais pas loin de mon coup.

    Le with marche, merci de ces bonnes explications

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Différence entre Script et Fonction
    Par Pinou421 dans le forum MATLAB
    Réponses: 3
    Dernier message: 04/05/2016, 14h20
  2. passage de données entre scripts python
    Par davs34 dans le forum Général Python
    Réponses: 7
    Dernier message: 31/12/2014, 18h41
  3. Passage de variables entre scripts
    Par zabdaniel dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 21/02/2008, 11h12
  4. Passage de variable entre scripts.
    Par Ambrym dans le forum Langage
    Réponses: 3
    Dernier message: 24/08/2006, 20h10
  5. passage de resultat de fonction entre deux .h
    Par zmatz dans le forum C++
    Réponses: 5
    Dernier message: 01/10/2005, 22h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo