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 :

Problèmes de paramétrage fonction R


Sujet :

R

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Développeur décisionnel
    Inscrit en
    Février 2013
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2013
    Messages : 28
    Par défaut Problèmes de paramétrage fonction R
    Bonjour,

    Je suis débutante R, je tente de créer une fonction simple pour comprendre le principe de la fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tab <- data.frame(age=c(1,2,3),type=c(1,1,1))
    J'enregistre le nouveau dataframe toto, l'équivalent de tab

    Je crée une fonction qui va faire la même chose de manière automatique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    temporal <- function(tableau_out, tableau_in) {tableau_out <<- tableau_in}
    rm(toto)
      temporal (toto,tab)
    Je souhaite que le paramètre tableau_out prenne la valeur de toto et tableau_in, celle de tab. ça ne marche pas. Je n'ai peut-être pas compris le principe d'une fonction en R

    merci à tous pour votre aide

  2. #2
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2017
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2017
    Messages : 34
    Par défaut
    Bonjour,

    Si j'ai bien compris:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    temporal = function(tableau_in){
      tableau_out = tableau_in
    }
     
    tableau_out = temporal(tableau_in)
    rm(tableau_in)
    j'espère que ca répond à ta demande
    Prog_R

  3. #3
    Membre chevronné
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Janvier 2012
    Messages
    325
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2012
    Messages : 325
    Par défaut
    Le problème vient du fait que tableau_out <<- tableau_in veut dire met la valeur de la variable tableau_out dans une variable nommée "tableau_out", et non dans une variable dont le nom est la valeur de la variable tableau_out (ce que tu devais penser). Au final si tu fait ls() tu verras que tu as une variable "tableau_out" qui se créé.

    Si tu viens d'un autre langage de programmation (c++ et dérivés), tu pensait peut être utiliser une référence, mais non, il n'y a pas de référence en R.

    Il faut passer par la fonction "assign" pour faire ce que tu veux.

  4. #4
    Membre averti
    Femme Profil pro
    Développeur décisionnel
    Inscrit en
    Février 2013
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2013
    Messages : 28
    Par défaut
    Merci pour vos retours. Je viens du monde SAS.

    Merci Theta, je comprends mieux.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    temporal = function(tableau_in){
      tableau_out = tableau_in
    }
     
    tableau_out = temporal(tableau_in)
    rm(tableau_in)
    Je souhaite avoir les 2 paramètres dans la fonction function(tableau_out, tableau_in). Pourquoi avez-vous supprimer tableau_out?

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2017
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2017
    Messages : 34
    Par défaut
    Si j'ai bien compris, tu souhaites faire une fonction qui attribue à tableau_out, les valeurs de tableau_in.
    dans la première partie de ta fonction, tu mets les paramètres nécessaire à la réalisation de ta sortie (tableau_out). Je vois pas trop l'intérêt de le mettre dans la fonction si ca dépend uniquement de tableau_in.

    J'ai sans doute pas totalement compris la demande

    Prog_R

  6. #6
    Membre averti
    Femme Profil pro
    Développeur décisionnel
    Inscrit en
    Février 2013
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2013
    Messages : 28
    Par défaut
    Merci. Mon objectif est de faire une fonction qui prend un dataframe source, fait un filtre et de met le résultat dans un nouveau dataframe.

    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
     
     
    # Création de 2 data frames sources
    tab_source1 <- data.frame(age=c(1,2,3),type=c(1,1,1))
    tab_source2 <- data.frame(age=c(1,2,3),type=c(1,1,1))
     
    #code non automatisé : filtres sur les dataframes sources et stockage des résultats dans des dataframes résultats
     
    new_tab1 <- tab_source1 %>% dplyr::filter(age>1)
    new_tab2 <- tab_source1 %>% dplyr::filter(age>2)
    new_tab3 <- tab_source1 %>% dplyr::filter(age>3)
     
     
    new_tab1_ <- tab_source2 %>% dplyr::filter(age>1)
    new_tab2_ <- tab_source2 %>% dplyr::filter(age>2)
    new_tab3_ <- tab_source2 %>% dplyr::filter(age>3)
    Comment automatiser le code ci-dessus avec une fonction? Ou placer la fonction assign? Voici ce que j'ai tenté mais ça ne marche pas.

    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
     
    #code automatisé
     
    temporal <- function (data_out,data_in, param_age){
      data_out <- data_in %>% dplyr::filter(age>param_age)
     
    }
     
    temporal (new_tab1,tab_source1,1)
    temporal (new_tab2,tab_source1,2)
    temporal (new_tab3,tab_source1,3)
     
    temporal (new_tab1_,tab_source2,1)
    temporal (new_tab2_,tab_source2,2)
    temporal (new_tab3_,tab_source2,3)
    J'espère être un peu plus clair. Merci encore

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2017
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2017
    Messages : 34
    Par défaut
    à tester:

    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
    22
    23
    # Création de 2 data frames sources
    tab_source1 <- data.frame(age=c(1,2,3),type=c(1,1,1))
    tab_source2 <- data.frame(age=c(1,2,3),type=c(1,1,1))
     
    #code non automatisé : filtres sur les dataframes sources et stockage des résultats dans des dataframes résultats
     
    ma_fonction = function(tab_source1, tab_source2){
    new_tab1 = tab_source1[which(tab_source1$age>1),]
    new_tab2 = tab_source1[which(tab_source1$age>2),]
    new_tab3 = tab_source1[which(tab_source1$age>3),]
     
    new_tab1_ = tab_source2[which(tab_source1$age>1),]
    new_tab2_ = tab_source2[which(tab_source1$age>2),]
    new_tab3_ = tab_source2[which(tab_source1$age>3),]
     
    assign(x='new_tab1', value=new_tab1, envir=.GlobalEnv)
    assign(x='new_tab2', value=new_tab2, envir=.GlobalEnv)
    assign(x='new_tab3', value=new_tab3, envir=.GlobalEnv)
    assign(x='new_tab1_', value=new_tab4, envir=.GlobalEnv)
    assign(x='new_tab2_', value=new_tab5, envir=.GlobalEnv)
    assign(x='new_tab3_', value=new_tab6, envir=.GlobalEnv)
    }
    ma_fonction(tab_source1,tab_source2)

    c'est ce que tu recherches ?

    Prog_R

  8. #8
    Membre Expert
    Inscrit en
    Novembre 2009
    Messages
    707
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 707
    Par défaut Problèmes de paramétrage fonction R
    Bonjour,

    Le plus simple est de faire un return() en fin de 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
    22
    > tab_source1 <- data.frame(age=c(1,2,3),type=c(1,1,1))
    > 
    > temporal <- function(data_in, param_age){
    +   data_out <- data_in[which(data_in$age >= param_age),]
    +   return(data_out)
    + }
    > 
    > sortie_toto <- temporal(tab_source1, 1)
    > sortie_toto
      age type
    1   1    1
    2   2    1
    3   3    1
    > titi_toto <- temporal(tab_source1, 2)
    > titi_toto
      age type
    2   2    1
    3   3    1
    > tutu_toto <- temporal(tab_source1, 3)
    > tutu_toto
      age type
    3   3    1
    Cordialement,

    PS : Puisque vous êtes un utilisateur SAS, je vous conseille le document R for SAS and SPSS users et le livre associé.

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

Discussions similaires

  1. [FLASH MX] Problème flash et fonction mail() php
    Par proutcore dans le forum Flash
    Réponses: 7
    Dernier message: 21/05/2007, 12h21
  2. Problème avec la fonction findfirst ()
    Par Angelico dans le forum Windows
    Réponses: 3
    Dernier message: 05/08/2004, 20h40
  3. [Requete SQL en VBA] Problème avec la fonction FLOOR
    Par zubral dans le forum Langage SQL
    Réponses: 4
    Dernier message: 13/07/2004, 13h24
  4. Problème avec les fonctions
    Par jvachez dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 13/01/2004, 12h06
  5. [Postgresql]Problème avec les fonctions ...
    Par fet dans le forum Requêtes
    Réponses: 4
    Dernier message: 02/10/2003, 09h04

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