[R] What is the difference between expression and quote when used with eval()?

Peter Dalgaard p.dalgaard at biostat.ku.dk
Fri Feb 19 19:39:11 CET 2010


blue sky wrote:
> I made the following example to see what are the difference between
> expression and quote. But I don't see any difference when they are
> used with eval()? Could somebody let me know what the difference is
> between expression and quote?

Expressions are vectors of unevaluated expressions, so one difference is 
that expressions can have more than one element.

Another difference is more subtle: objects of mode "expression" are 
better at retaining their identity as an unevaluated expression

 > eval(substitute(2+x,list(x=expression(pi))))
Error in 2 + expression(pi) : non-numeric argument to binary operator
 > eval(substitute(2+x,list(x=quote(pi))))
[1] 5.141593

The really convincing application of this escapes me for the moment, but 
the gist of it is that there are cases where a quoted expression may 
blend in a bit too seemlessly when using computing on the language.

Also, expression objects are more easy to recognize programmeatically, 
quote() may result in objects of mode "call", "name", or one of the base 
classes.

-pd


> 
> expr=expression(2*3)
> quo=quote(2*3)
> 
> eval(expr)
> str(expr)
> class(expr)
> typeof(expr)
> mode(expr)
> attributes(expr)
> 
> eval(quo)
> str(quo)
> class(quo)
> typeof(quo)
> mode(quo)
> attributes(quo)
> 
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.


-- 
    O__  ---- Peter Dalgaard             Øster Farimagsgade 5, Entr.B
   c/ /'_ --- Dept. of Biostatistics     PO Box 2099, 1014 Cph. K
  (*) \(*) -- University of Copenhagen   Denmark      Ph:  (+45) 35327918
~~~~~~~~~~ - (p.dalgaard at biostat.ku.dk)              FAX: (+45) 35327907



More information about the R-help mailing list