Problème de guillemets

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Christine Proença
Messages : 6
Enregistré le : 15 Mar 2007, 10:08

Problème de guillemets

Messagepar Christine Proença » 03 Juil 2008, 15:40

Bonjour,

J'ai dans un fichier de paramétrage parametre une colonne selec qui contient des expressions logiques de sélection de ligne d'un data.frame dat.
Dans un programme, je lis ce fichier de paramétrage en utilisant la fonction read.table et j'évalue, pour chaque ligne i du fichier de paramétrage, le contenu de l'expression de sélection, afin de réaliser des analyses sur différentes sous-sélections.
Il se pose un problème lorsque l'expression de sélection contient des guillemets, par exemple :

Code : Tout sélectionner

population=="population1"
(population étant le nom d'une colonne de dat et population1 étant un des niveaux du facteur population).
Dans le programme j'utilise le code suivant pour ne sélectionner que les lignes du data.frame dat qui correspondent à cette condition :

Code : Tout sélectionner

dat[with(dat, eval(parse(text = as.character(parametre$selec[i])))),]

et l'expression de sélection récupérée ne contient plus les guillemets. Dans cet exemple,

Code : Tout sélectionner

as.character(parametre$selec[i])
contient population == population1
J'ai essayé en protégeant les guillemets par des anti-slash (population==\"population1\") dans le fichier de paramétrage, mais je n'arrive pas à mes fins.
Auriez-vous une idée pour me sortir de ce problème ?

Merci d'avance,
Christine

Olivier Delaigue
Messages : 220
Enregistré le : 05 Déc 2006, 07:38

Messagepar Olivier Delaigue » 03 Juil 2008, 15:53

Je n'ai pas tout saisi, mais peut-être que bquote correspondrait.

François Bonnot
Messages : 537
Enregistré le : 10 Nov 2004, 15:19
Contact :

Messagepar François Bonnot » 04 Juil 2008, 06:57

et l'expression de sélection récupérée ne contient plus les guillemets

Bonjour,
Pourtant ce code fonctionne :

Code : Tout sélectionner

> parametre
                      selec
1 population=="population1"
2 population=="population2"
> class(parametre$selec)
[1] "factor"
> as.character(parametre$selec[1])
[1] "population==\"population1\""
> parse(text=as.character(parametre$selec[1]))
expression(population=="population1")
attr(,"srcfile")
<text>
> population <- "population1"
> eval(parse(text=as.character(parametre$selec[1])))
[1] TRUE
> eval(parse(text=as.character(parametre$selec[2])))
[1] FALSE

FB

Christine Proença
Messages : 6
Enregistré le : 15 Mar 2007, 10:08

Messagepar Christine Proença » 04 Juil 2008, 08:03

Bonjour,

Merci pour vos réponses. François, mon problème est que quand je lis le fichier de paramétrage qui contient population=="population1", par le code

Code : Tout sélectionner

parametre <- read.table("param.txt", sep = "\t", h = T)

j'obtiens ce résultat dans R :

Code : Tout sélectionner

> parametre
                    selec
1 population==population1
2 population==population2


ie sans les guillemets...
Mon problème consiste donc à récupérer le contenu du fichier de paramétrage tel qu'il est (population=="population1"), avec les guillemets.

Merci d'avance
Christine

Julien Barnier
Messages : 45
Enregistré le : 24 Juin 2008, 13:19
Contact :

Messagepar Julien Barnier » 04 Juil 2008, 08:19

Et en ajoutant l'option quote="" dans read.table() ?

Christine Proença
Messages : 6
Enregistré le : 15 Mar 2007, 10:08

Messagepar Christine Proença » 04 Juil 2008, 08:37

Dans ce cas, j'obtiens

Code : Tout sélectionner

 > parametre
         selec
"pop==""population1"""


Christine

Julien Barnier
Messages : 45
Enregistré le : 24 Juin 2008, 13:19
Contact :

Messagepar Julien Barnier » 04 Juil 2008, 08:50

Pourriez-vous copier/coller les première lignes de votre fichier de paramétrage ?

Parce qu'avec le fichier suivant :

Code : Tout sélectionner

selec   toto                                                       
population=="population1"       titi                               
population=="popultaion2"       tata


Et le code suivant :

Code : Tout sélectionner

parametre <- read.table("/tmp/param.txt", sep = "\t", h = T,quote="")


J'obtiens ceci :


Code : Tout sélectionner

R> parametre
                      selec toto
1 population=="population1" titi
2 population=="popultaion2" tata


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité