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 :

Regex ou autre solution ?


Sujet :

R

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Femme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    272
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 272
    Par défaut Regex ou autre solution ?
    Bonjour,
    je suis un peu perdue avec les expressions régulières et R
    Voici mon problème: j'ai deux fonctions f1 et f2.
    Dans f1, je charge des environnements de travail (assez lourds) et j'utilise des fichiers de ces environnements: Fic1, Fic2, ...
    Je voudrais passer ces fichiers en paramètres dans f2 (f2 appelle f1 et permet donc de ne charger qu'un seul environnement à la fois).
    Problème:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    name <- c(Fic1, Fic2, ...)
    ne peut pas fonctionner puisque les environnements ne sont pas chargés et qu'il ne reconnaît pas les objets.
    Mon idée serait de faire dans f2:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    name <- c("Fic1", "Fic2", ...)
    et de les appeler dans f1 en "enlevant les double quote"
    C'est un peu tordu, mais je n'ai pas d'autre idée.
    D'où mes deux questions svp:
    1/ Y a-t-il un moyen plus simple que je ne vois pas?
    2/ sinon, faudrait-il utiliser les fonctions régulières pour supprimer ces double quote? Si oui, comment svp? -je n'y connais rien en regex -
    Merci d'avance

  2. #2
    Membre Expert
    Avatar de pitipoisson
    Homme Profil pro
    Chercheur
    Inscrit en
    Septembre 2006
    Messages
    1 942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Chercheur
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 942
    Par défaut
    Bonjour,

    Je m'étonne que tu ais besoin des noms de fichiers sans les guillemets : s'ils sont sauvegardés au format .RData j'imagine que tu les recharges avec la fonction load() qui prend en argument une chaîne de caractères (ou bien si tu t'y prends autrement, donne-nous davantage d'info).

    Quoi qu'il en soit, les expressions régulières ne te seront à mon avis d'aucune utilité : les fonctions qui les utilisent travaillent sur des chaînes de caractères et retournent des chaînes de caractères... les guillemets ouvrants et fermants n'en font pas partie, ils servent juste à l'affichage*.

    Pour "supprimer" les guillemets, tu peux par contre utiliser la fonction parse() qui retourne une expression non évaluée. En conjonction avec eval(), elle permet d'évaluer des commandes contenues dans des chaînes de caractères (construites par exemple avec paste()) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    > eval(parse(text="x <- 1; message('x = ', x)"))
    x = 1

    ----------------
    * En revanche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    > a <- c("a", "'", "b")
    > b <- c('a', '"', 'b')
    > a
    [1] "a" "'" "b"
    > b
    [1] "a"  "\"" "b" 
    > grep("'", a)
    [1] 2
    > grep('"', b)
    [1] 2

  3. #3
    Membre chevronné
    Femme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    272
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 272
    Par défaut
    Bonjour pitipoisson et merci pour ta réponse
    Je charge bien les environnements de travail avec load().
    Mon problème est que je me sers de:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lapply(1:12, function(k){f1(Names, k, Sortie = Sort[k])})
    et que j'utilise:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Names <- c(Fic1, ..., Fic12)
    qui n'est pas reconnu si les 12 environnements contenant les Fic1... ne sont pas chargés!
    Je les ai finalement chargés -faute de mieux- mais je trouve cela un peu lourd, d'autant plus que, plus tard, j'aurais peut-être à modifier ce programmme et à entrer plus de 12 fichiers
    Je vais donc essayer d'adapter ta suggestion , sauf si quelqu'un a une autre idée (svp )
    Merci d'avance

  4. #4
    Membre Expert
    Avatar de pitipoisson
    Homme Profil pro
    Chercheur
    Inscrit en
    Septembre 2006
    Messages
    1 942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Chercheur
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 942
    Par défaut
    OK, donc d'après ce que je comprends, tu as 12 environnements qui doivent contenir chacun un objet du même nom.
    Le problème ne devrait pas être de les charger a posteriori si tu utilises un vecteur de nom
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Names <- c("Fic1", ..., "Fic12")
    (ce que tu ne fais pas pour l'instant, d'ailleurs pour rassembler des objets quelconques il vaut mieux utiliser list()).
    Là tu pourras charger l'objet au moment opportun avec
    Le problème sera dans f1() d'exécuter des instructions utilisant l'objet chargé. Pour ça, je pense que la méthode dont je parlais plus haut pourrait t'aider.
    Juste un petit exemple supplémentaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    > fic1 <- "Bla"
    > fic2 <- "foo"
    > names <- c("fic1", "fic2")
    
    > for(i in names){eval(parse(text=paste("cat(", i, ", \"\n\")")))}
    Bla 
    foo 
    >

  5. #5
    Membre chevronné
    Femme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    272
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 272
    Par défaut
    Citation Envoyé par pitipoisson Voir le message
    Bonjour,

    Je m'étonne que tu ais besoin des noms de fichiers sans les guillemets : s'ils sont sauvegardés au format .RData j'imagine que tu les recharges avec la fonction load() qui prend en argument une chaîne de caractères (ou bien si tu t'y prends autrement, donne-nous davantage d'info).

    Quoi qu'il en soit, les expressions régulières ne te seront à mon avis d'aucune utilité : les fonctions qui les utilisent travaillent sur des chaînes de caractères et retournent des chaînes de caractères... les guillemets ouvrants et fermants n'en font pas partie, ils servent juste à l'affichage*.

    Pour "supprimer" les guillemets, tu peux par contre utiliser la fonction parse() qui retourne une expression non évaluée. En conjonction avec eval(), elle permet d'évaluer des commandes contenues dans des chaînes de caractères (construites par exemple avec paste()) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    > eval(parse(text="x <- 1; message('x = ', x)"))
    x = 1

    ----------------
    * En revanche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    > a <- c("a", "'", "b")
    > b <- c('a', '"', 'b')
    > a
    [1] "a" "'" "b"
    > b
    [1] "a"  "\"" "b" 
    > grep("'", a)
    [1] 2
    > grep('"', b)
    [1] 2

    Merci beaucoup pour cette fonction parse() que je ne connaissais pas!
    Voici mon "code", si cela peut aider un jour...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    PathData <- "C:\\DossierTravail"
    Env <- c(Env1, Env2, ..., Env12)
    Names <- c("Fic1", ..., "Fic12")
    Sort <- c(Sortie1, ..., Sortie12)
    source("C:\\HEssaiParse.r")
    lapply(1:12, function(k){HEssai(Env = Env[k], Names = Names[k], Sortie = Sort[k])})
    Dans HEssaiParse.r:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    HEssai <- function(Env, Names, Sortie) {
     
    load(paste(PathData, Env, sep = ""))
    temp <- eval(parse(text=Names))
     
    NbFich <- temp$NbFic
    NomFich <- temp$NomFic
    print(NomFich)     # pour vérifier
    }
    Encore merci et à bientôt

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 01/06/2006, 23h34
  2. Cadres : quelle autre solution?
    Par charliejo dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 02/02/2006, 17h03
  3. [Tkinter] faire disparaitre un label ou autre solution
    Par thierry_b dans le forum Tkinter
    Réponses: 3
    Dernier message: 06/01/2006, 17h22
  4. Etat : fond de page ou autre solution ?
    Par Mulele dans le forum IHM
    Réponses: 3
    Dernier message: 11/11/2005, 20h15
  5. Autre solution que IBEvents
    Par aallal dans le forum Bases de données
    Réponses: 3
    Dernier message: 17/10/2005, 13h12

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