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 :

Bizarrerie dans une fonction avec data.table


Sujet :

R

  1. #1
    Membre actif
    Inscrit en
    Novembre 2003
    Messages
    543
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 543
    Points : 239
    Points
    239
    Par défaut Bizarrerie dans une fonction avec data.table
    Bonjour,

    Voici une table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
       X Y NB
    1: a 0  1
    2: b 1  2
    3: a 1  3
    4: c 0  4
    5: a 0  5
    6: c 1  6
    7: a 1  7
    et un petit bout de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    DT <- data.table(X=c('a','b','a','c','a','c','a'), Y=c(0,1,1,0,0,1,1), NB=1:7) ; DT
    Fonction <- function(Data, V1) {
       print("Sortie 1") ; print(Data[            , .(sum(NB)), by=.(   V1=get(V1))])
       print("Sortie 2") ; print(Data[            , .(sum(NB)), by=.(Y, V1=get(V1))])
       print("Sortie 3") ; print(Data[X != 'a'    , .(sum(NB)), by=.(   V1=get(V1))])
       print("Sortie 4") ; print(Data[X != 'a'    , .(sum(NB)), by=.(Y, V1=get(V1))])
    }
    Fonction(DT, 'X')
    Je fais des cumuls de ma variable NB, selon les modalités des variables X et/ou Y.
    Dans le 1er cas, je fais un cumul en fonction de X
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    "Sortie 1"
       V1 NB
    1:  a 16
    2:  b  2
    3:  c 10
    Dans le 2nd cas, cumul selon X et Y
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    "Sortie 2"
       Y V1 NB
    1: 0  a  6
    2: 1  b  2
    3: 1  a 10
    4: 0  c  4
    5: 1  c  6
    Dans le 3ème cas, cumul selon X lorsque X != 'a'
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     "Sortie 3"
       V1 NB
    1:  b  2
    2:  c 10
    Dans le 4ème cas, cumul selon X et Y lorsque X := 'a'
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    "Sortie 4"
    Error in get(V1) : objet 'X' introuvable
    On voit qu'il y a un message d'erreur dans ce 4ème cas, que je ne comprends pas du tout.
    Est-ce que quelqu'un saurait pourquoi 'X' est introuvable, alors qu'il était trouvé dans les précédents cas ?

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2012
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    Bonjour
    Je vous conseille d'utiliser la library(dplyr)
    Les fonctions ( filter, group_by et summurise..) vous permettront de facilement resoudre votre problème

  3. #3
    Membre actif
    Inscrit en
    Novembre 2003
    Messages
    543
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 543
    Points : 239
    Points
    239
    Par défaut
    Bonjour, et merci du conseil
    Toutefois ma question reste et demeure. Elle concerne data.table et non dplyr !

Discussions similaires

  1. Réponses: 9
    Dernier message: 15/11/2020, 09h15
  2. Réponses: 14
    Dernier message: 23/05/2016, 09h13
  3. Réponses: 2
    Dernier message: 15/02/2014, 22h14
  4. Utilisation de COUNT() dans une requete avec 3 table
    Par chych dans le forum Requêtes
    Réponses: 1
    Dernier message: 18/06/2010, 11h54
  5. Accès à listview dans une fonction avec borland builder 5
    Par xasmxasm dans le forum C++Builder
    Réponses: 4
    Dernier message: 13/05/2008, 20h16

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