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 :

Importer des fichiers différents


Sujet :

R

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Importer des fichiers différents
    Bonjour,

    Je fais appel à vous car je suis confronté à un petit problème.

    Voici le contexte : Je fais appel à mes fonctions depuis un script avec source("fonctions.R"). J'ai essayé de coder pour importer des fichiers différents selon le paramètre entrant. Voici le code de ma fonction, ce sera plus parlant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    importation <- function(x) {
    if(x=="IC") {
    ex1 <- read.table("exemple.csv",header=T,dec=",",sep=";",skip=1)
    }
    if(x=="C") {
    ex2 <- read.table("exemple.csv",header=T,dec=",",sep=";",skip=1)
    }
    }
    J'ai l'impression que ça importe mais est-ce que vous connaitriez un moyen pour garder le fichier en mémoire ? Le problème est que si j'importe "ex1", je ne pourrais pas travailler dessus par la suite.

    De même avec une fonction fusion qui merge tous mes fichiers ensemble.

    J'ai surement loupé un truc et donc si vous pouviez me venir en aide, j'apprécierais

  2. #2
    Modératrice

    Femme Profil pro
    Statisticienne, Fondatrice de la société DACTA
    Inscrit en
    Juin 2010
    Messages
    893
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Statisticienne, Fondatrice de la société DACTA

    Informations forums :
    Inscription : Juin 2010
    Messages : 893
    Points : 2 673
    Points
    2 673
    Par défaut
    Bonjour,

    Je pense que ce qu'il vous manque c'est un élément "return" au sein de votre fonction.

    Par exemple, quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    importation <- function(x) {
    if(x=="IC") {
    ex <- read.table("exemple1.csv",header=T,dec=",",sep=";",skip=1)
    }
    if(x=="C") {
    ex <- read.table("exemple2.csv",header=T,dec=",",sep=";",skip=1)
    }
    return(ex)
    }
    HTH !


    Cordialement,


    A.D.

    Forum R
    Fournir le code utilisé (pensez aux balises code !), les packages nécessaires, ainsi qu'un court mais représentatif extrait du jeu de données et les éventuels messages d'erreur.
    Recherche d'informations concernant R : RSiteSearch / tutoriels : http://r.developpez.com/cours/ .

    Pensez également au bouton "Résolu" et à voter (en bas à droite des messages) lorsque vous avez obtenu une réponse satisfaisante.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Je vous remercie pour votre réponse.

    Justement c'est ça le hic, j'ai beau mettre un return, il ne me l'enregistre pas. Par ailleurs, l'importation est un échec puisqu'il ne me ressort que des NA.

    Mon code exactement :

    Script "fonctions.R" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    importation <- function(x) {
    setwd("Chemin")
    if(x=="IC") {
    ex1 <- read.table("exemple.csv",header=T,dec=",",sep=";",skip=1)
    }
    if(x=="C") {
    ex1 <- read.table("exemple2.csv",header=T,dec=",",sep=";",skip=1)
    }
    return(ex1)
    }
    Script :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    source("fonctions.R")
    importation("IC")
    # là il me ressort mon fichier rempli de NA
    ex1
    Erreur : objet 'ex1' introuvable
    P.S : Mon fichier fait 50k lignes et une centaine de variables, pensez vous que cela joue pour l'enregistrer à la suite de la fonction?

  4. #4
    Modératrice

    Femme Profil pro
    Statisticienne, Fondatrice de la société DACTA
    Inscrit en
    Juin 2010
    Messages
    893
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Statisticienne, Fondatrice de la société DACTA

    Informations forums :
    Inscription : Juin 2010
    Messages : 893
    Points : 2 673
    Points
    2 673
    Par défaut
    Bonjour,

    A première vue comme ça, je ne sais pas trop, d'où vient le problème...

    Peut-être que vous devriez spécifier le chemin en dehors de la fonction "importation" car je me demande du coup si ce n'est pas dans ce dossier que sera stocké le "ex1" ? Peut-être spécifier le chemin directement dans le "read.table" sinon ?
    Et aussi essayer de charger ces fichiers "en dehors" de l'appel au script via "source", juste pour être sûr déjà qu'il n'y ait pas un problème avec le dit fichier...

    Sinon je ne pense pas que le nombre de lignes ou de variables est une influence, sauf si vous avez malencontreusement utilisé plusieurs fois le même nom de variable ?

    [EDIT]

    Peut-être que ceci fonctionne mieux ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    source("fonctions.R")
    ex1=importation("IC")
    ex1

    HTH !


    Cordialement,


    A.D.

    Forum R
    Fournir le code utilisé (pensez aux balises code !), les packages nécessaires, ainsi qu'un court mais représentatif extrait du jeu de données et les éventuels messages d'erreur.
    Recherche d'informations concernant R : RSiteSearch / tutoriels : http://r.developpez.com/cours/ .

    Pensez également au bouton "Résolu" et à voter (en bas à droite des messages) lorsque vous avez obtenu une réponse satisfaisante.

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Ton script marche parfaitement, je ne sais pas pourquoi j'avais pas pensé a ça

    Par ailleurs, je voudrais généraliser ma fonction pour plusieurs fichiers :

    Script fonctions.R :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    importation <- function(x) {
    if(x=="IC") {
    ex1 <- read.table("x/ex1.csv",header=T,dec=",",sep=";",skip=1)
    ex2 <- read.table("x/ex2.csv",header=T,dec=",",sep=";",skip=1)
    ex3 <- read.table("x/ex3.csv",header=T,dec=",",sep=";",skip=1)
    }
    if(x=="IC") {
    ex1 <- read.table("y/ex1.csv",header=T,dec=",",sep=";",skip=1)
    ex2 <- read.table("y/ex2.csv",header=T,dec=",",sep=";",skip=1)
    ex3 <- read.table("y/ex3.csv",header=T,dec=",",sep=";",skip=1)
    }
    return(list(ex1,ex2,ex3))
    }
    Script principal :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    source("fonctions.R")
     
    c(ex1,ex2,ex3) <- importation("IC")
    Cependant, il me sort un message d'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Erreur dans c(ex1, ex2, ex3) <- importation("IC") : 
      impossible de trouver la fonction "c<-"
    As-tu une idée pour stocker plusieurs fichiers?

    Cordialement,

    Wheist

  6. #6
    Modératrice

    Femme Profil pro
    Statisticienne, Fondatrice de la société DACTA
    Inscrit en
    Juin 2010
    Messages
    893
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Statisticienne, Fondatrice de la société DACTA

    Informations forums :
    Inscription : Juin 2010
    Messages : 893
    Points : 2 673
    Points
    2 673
    Par défaut
    Re-bonjour,

    Le fait de passer par une liste comme tu l'as fait est également la première idée que j'aurais eu.
    Par contre le problème c'est la manière dont tu stockes la sortie ! Quand tu fais appel à "c(ex1,ex2,ex3)" tu crées un vecteur, or ta fonction "importation" renvoie une liste :/

    Je ne sais pas ce qui est le plus simple/le plus optimal mais tu peux simplement stocker ta sortie dans un élément "L" qui sera une liste. A la limite, si tu veux garder les noms "ex1", "ex2", etc, tu peux nommer les éléments de ta liste selon ces noms comme suit :

    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
    importation <- function(x) {
     
    mylist <- vector("list", 0)
     
    if(x=="IC") {
    mylist$ex1 <- read.table("x/ex1.csv",header=T,dec=",",sep=";",skip=1)
    mylist$ex2 <- read.table("x/ex2.csv",header=T,dec=",",sep=";",skip=1)
    mylist$ex3 <- read.table("x/ex3.csv",header=T,dec=",",sep=";",skip=1)
    }
    if(x=="IC") {
    mylist$ex1 <- read.table("y/ex1.csv",header=T,dec=",",sep=";",skip=1)
    mylist$ex2 <- read.table("y/ex2.csv",header=T,dec=",",sep=";",skip=1)
    mylist$ex3 <- read.table("y/ex3.csv",header=T,dec=",",sep=";",skip=1)
    }
    return(mylist)
    }
    Puis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    source("fonctions.R")
     
    L <- importation("IC")
     
    L$ex1
    L$ex2

    HTH !


    Cordialement,


    A.D.

    Forum R
    Fournir le code utilisé (pensez aux balises code !), les packages nécessaires, ainsi qu'un court mais représentatif extrait du jeu de données et les éventuels messages d'erreur.
    Recherche d'informations concernant R : RSiteSearch / tutoriels : http://r.developpez.com/cours/ .

    Pensez également au bouton "Résolu" et à voter (en bas à droite des messages) lorsque vous avez obtenu une réponse satisfaisante.

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Re-bonjour,

    Exact, il me fallait une liste, tu avais bon . Cependant, il ne garde pas le nom ex1 en mémoire, il est nécessaire de rechercher dans la liste la position (de l'importation).

    Pour être plus clair :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    source("fonctions.R")
     
    L <- importation("IC")
     
    ex1 <- L[[1]]
    ex2 <- L[[2]]
    Tout marche par la suite! Je te remercie de ta disponibilité

    Cordialement,

    Wheist

Discussions similaires

  1. Réponses: 4
    Dernier message: 15/06/2015, 11h31
  2. Importation des fichiers les plus recents
    Par avantoux dans le forum VBA Access
    Réponses: 8
    Dernier message: 28/09/2007, 13h50
  3. Réponses: 1
    Dernier message: 06/01/2006, 13h09
  4. [3D'S MAX] importer des fichiers dans OpenGL
    Par black is beautiful dans le forum OpenGL
    Réponses: 3
    Dernier message: 30/04/2005, 13h45
  5. Importer des fichiers textes délimités
    Par Invité dans le forum Outils
    Réponses: 2
    Dernier message: 23/09/2002, 13h56

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