parse, deparse, eval, substitute

Questions sur les objets de R et la manipulation des données

Modérateur : Groupe des modérateurs

Matthieu Lesnoff
Messages : 120
Enregistré le : 29 Nov 2004, 12:41

parse, deparse, eval, substitute

Messagepar Matthieu Lesnoff » 18 Avr 2005, 13:09

A partir d'un exemple simple, quelqu'un pourrait-il expliquer le sens des fonctions :

- parse/deparse
- eval
- substitute

Je les ai deja utilisées avec succès dans certains scripts, mais de manière assez pifométrique, et je n'ai pas pleinement compris leur sens. L'aide R de ces fcts reste assez ésotérique pour moi...

Merci pour toute aide

Matthieu

Renaud Lancelot
Messages : 2484
Enregistré le : 16 Déc 2004, 08:01
Contact :

Messagepar Renaud Lancelot » 23 Avr 2005, 14:38

Salut Matthieu,

Voici un exemple permettant de voir comment construire l'appel d'un modèle, quand on ne sait pas quelles variables ni quel jeu de données sont en cause (comme cela peut se produire à l'intérieur d'une fonction).

Code : Tout sélectionner

> Data <- data.frame(resp = rnorm(10), expl = rep(c("A", "B"), 5))
> chaine <- "lm(resp ~ expl, data = Data)"
>
> # parse retourne l'expression, non évaluée
> express <- parse(text = chaine)
> express
expression(lm(resp ~ expl, data = Data))
>
> # eval évalue une expression
> eval(express)

Call:
lm(formula = resp ~ expl, data = Data)

Coefficients:
(Intercept)        explB 
    -0.3551       0.7100 

>
> # deparse: contraire de parse...
> deparse(express)
[1] "expression(lm(resp ~ expl, data = Data))"
>
> # substitute: substitue les éléments d'une expression par leur valeur
> expr <- substitute(paste("lm(", v1, "~", v2, ", data =", v3, ")"),
+                    list(v1 = "resp", v2 = "expl", v3 = "Data"))
> expr
paste("lm(", "resp", "~", "expl", ", data =", "Data", ")")
>
> chaine <- eval(regc)
> chaine
[1] "lm( resp ~ expl , data = Data )"
>
> expr_chaine <- parse(text = chaine)
> expr_chaine
expression(lm(resp ~ expl, data = Data))
>
> eval(expr_chaine)

Call:
lm(formula = resp ~ expl, data = Data)

Coefficients:
(Intercept)        explB 
    -0.3551       0.7100 




Amicalement,

Renaud

Matthieu Lesnoff
Messages : 120
Enregistré le : 29 Nov 2004, 12:41

Messagepar Matthieu Lesnoff » 24 Avr 2005, 13:17

Renaud Lancelot a écrit :...
Voici un exemple permettant de voir comment construire l'appel d'un modèle, quand on ne sait pas quelles variables ni quel jeu de données sont en cause (comme cela peut se produire à l'intérieur d'une fonction)....
Renaud


Super ! merci Renaud


Retourner vers « Archives : Manipulation de données avec R »

Qui est en ligne

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