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 :

construire un vecteur avec les données d'un fichier pour utiliser la fonction ks.test


Sujet :

R

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 7
    Points : 4
    Points
    4
    Par défaut construire un vecteur avec les données d'un fichier pour utiliser la fonction ks.test
    je veux convertir les données de 2 fichiers en deux vecteurs pour utiliser la fonction ks.test.

    J'ai utilisé la fonction read.table pour construire un objet data1, puis un objet data2.
    J'ai ensuite converti data1, puis data2, en vecteurs avec la fonction c.

    Et d'ailleurs
    is.vector(c(data1)) = TRUE et is.vector(c(data2)) = TRUE

    MAIS
    - l'affichage de c(data1) fait apparaître un mystérieux $V1 avant les données
    - idem pour c(data2)
    - ks.test(c(data1), c(data2)) fait apparaître le message d'erreur
    "Erreur dans ks.test(c(data1), c(data2)) :
    'y' doit être numérique ou bien une chaîne de caractères donnant le nom de la fonction adéquate
    "

    Bref, cela ne marche pas ce qui est bien triste.

    Pouvez-vous m'aider ?

  2. #2
    Membre habitué
    Inscrit en
    Mai 2010
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 74
    Points : 164
    Points
    164
    Par défaut
    Il semblerait que les données ne soit pas au bon format...comme ca c'est un peu dure de t'aider comme ca sans info supplémentaire, tu peux m'aider à t'aider :
    Tu fais un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    str(data1)
    str(data2)
    Ensuite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    head(data1)
    head(data2)
    Que tu pourra afficher à l'aide de la balise code (#) sur le forum...le but est de voir quel est la structure de tes données et comprendre le problème......

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 7
    Points : 8
    Points
    8
    Par défaut
    Pour supprimer des attributs il existe unclass().
    Je n'ai pas réussi à reproduire l'erreur, voici un exemple qui marche.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    don1<-data.frame("a"=c(1,2,3,4))
    don2<-data.frame("b"=c(2,3,4,4))
    v1<-don1[,1]
    v2<-don2[,1]
    ks.test(v1,v2)

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par dickoa Voir le message
    Il semblerait que les données ne soit pas au bon format...comme ca c'est un peu dure de t'aider comme ca sans info supplémentaire, tu peux m'aider à t'aider :
    Tu fais un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    str(data1)
    str(data2)
    Ensuite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    head(data1)
    head(data2)
    Que tu pourra afficher à l'aide de la balise code (#) sur le forum...le but est de voir quel est la structure de tes données et comprendre le problème......
    Voici la trace (non tronquée)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    > str(data1)
    'data.frame':   67 obs. of  1 variable:
     $ V1: num  0.0314 0.0475 0.051 0.0252 0.0201 ...
    >head(data1)
     V1
    1 0.031440
    2 0.047506
    3 0.051020
    4 0.025234
    5 0.020103
    6 0.038202
    Même trace (non tronquée) après la construction d'un vecteur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    > str(c(data1))
    List of 1
     $ V1: num [1:67] 0.0238 0.0729 0.0356 0.0548 0.032 ...
    >head(c(data1))
    $V1
     [1] 0.023834 0.072900 0.035582 0.054804 0.032035 0.128869 0.034787 0.033377 0.032696 0.026848 0.034483 0.034032
    [13] 0.015570 0.029112 0.032424 0.020792 0.024038 0.048193 0.041679 0.027377 0.037154 0.026286 0.023566 0.030961
    [25] 0.028564 0.036879 0.046170 0.046595 0.027041 0.026685 0.025172 0.030932 0.027716 0.020797 0.031621 0.024859
    [37] 0.024497 0.031250 0.025466 0.022657 0.024105 0.017321 0.022869 0.034189 0.043716 0.021023 0.023141 0.028137
    [49] 0.029802 0.045205 0.010824 0.049545 0.028301 0.041384 0.034254 0.021357 0.028944 0.022216 0.043309 0.028025
    [61] 0.022352 0.022303 0.020643 0.014459 0.027726 0.055107 0.020470
    Merci

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par petromyzon Voir le message
    Pour supprimer des attributs il existe unclass().
    Je n'ai pas réussi à reproduire l'erreur, voici un exemple qui marche.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    don1<-data.frame("a"=c(1,2,3,4))
    don2<-data.frame("b"=c(2,3,4,4))
    v1<-don1[,1]
    v2<-don2[,1]
    ks.test(v1,v2)
    Merci, mais en construisant les vecteurs en direct je réussis aussi à utiliser le test.
    Mais je souhaite lire les données dans un fichier.

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 7
    Points : 8
    Points
    8
    Par défaut
    c(data1) te donne une liste et non un vecteur. c() sert à concatener des nombres dans un vecteur mais pas à construire un vecteur à partir un data.frame. Dans ton cas c'est plus simple,comme je te l'avais indiqué dans l'exemple utilise
    data1[,1] qui extrait la première colonne de ton data.frame, c'est à dire un vecteur .
    is.vector(c(data1)) devrait renvoyer FALSE.
    class(c(data1)) doit te renvoyer list
    is.vector(data1[,1]) doit te renvoyer TRUE
    class(data1[,1]) doit te renvoyer vector
    Bon courage !

  7. #7
    Membre habitué
    Inscrit en
    Mai 2010
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 74
    Points : 164
    Points
    164
    Par défaut
    Salut
    quand t'a fais str(data1), R te dit que ton objet data1 est de type data.frame ce qui est normal quand tu utilise read.table, or un data.frame qui est une liste assez spéciales (vecteur de même longueur) que utilisera très souvent dans R.
    La fonction ks.test veux des vecteurs en entré, c'est parfait parceque dans un data.frame une colonne ou variable est un vecteur.
    Si on reprends l'exemple avec data1, t'a une colonne V1 et disons que pour data2 la colonne d'intêret s'appelle V2 (fais un str(data2) pour savoir).
    Donc si tu veux l'utiliser pour ton test tu peux faire directement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ks.test(data1$V1, data2$V2)
    le signe $ c'est pour choisir les colonnes V1, t'aurais pu aussi faire comme petromyzon l'a dit, si tes deux éléments sont en première colonne chacune (sinon tu met les numeros correspondant à la place des "1" dans le code) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ks.test(data1[, 1], data2[, 1]
    et tu peux même faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ks.test(data1[, "V1"], data2[, "V2"])
    ou encore
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    attach(data1)
    attach(data2)
    ks.test(V1, V2)
    detach(data1)
    detach(data2)
    Mais cette derniere n'est pas trop recommandé en général...on lui prefere l'utilisation de with

    Donc n'essai pas de convertir directement ton data.frame de cette facon parceque au pire tu l'a transforme, en liste.
    D'un autre coté si utilisait scan pour rentrer tes données t'aurais des matrices plutot que des data.frames ce qui changerait la donne, même si pour faire des statistiques les data.frames sont très pratique.

    FInalement comme tu le remarque y'a mille facon de choisir des vecteurs dans un data.frame, je te conseille de lire R pour les débutants de Paradis, ou celui de Julien Barnier, R pour les sociologues, ils sont pas mal pour commencer

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par dickoa Voir le message

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ks.test(data1$V1, data2$V1)
    le signe $ c'est pour choisir les colonnes V1

    marche parfaitement

    MERCI

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par petromyzon Voir le message
    c(data1) te donne une liste et non un vecteur. c() sert à concatener des nombres dans un vecteur mais pas à construire un vecteur à partir un data.frame. Dans ton cas c'est plus simple,comme je te l'avais indiqué dans l'exemple utilise
    data1[,1] qui extrait la première colonne de ton data.frame, c'est à dire un vecteur .
    is.vector(c(data1)) devrait renvoyer FALSE.
    class(c(data1)) doit te renvoyer list
    is.vector(data1[,1]) doit te renvoyer TRUE
    class(data1[,1]) doit te renvoyer vector
    Bon courage !
    En fait is.vector(c(data1)) rend TRUE...
    et class(c(data1)) rend bien list
    is.vector(data1[,1]) rend vector
    mais class(data1[,1]) rend "numeric"

    Entretemps je viens de réussir à m'en sortir en faisant
    ks.test(data1$V1, data2$V1)

    Merci

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 09/05/2014, 09h29
  2. Réponses: 4
    Dernier message: 28/04/2009, 16h32
  3. Réponses: 12
    Dernier message: 22/06/2006, 12h09
  4. Génération de script SQL avec les données
    Par borgfabr dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 05/03/2004, 13h57
  5. Réponses: 13
    Dernier message: 14/10/2003, 14h31

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