On 02/21/2010 01:45 AM, blue sky wrote:

On Sat, Feb 20, 2010 at 2:40 AM, Romain Francois
<romain.franc...@dbmail.com>  wrote:
On 02/19/2010 10:31 PM, William Dunlap wrote:

-----Original Message-----
From: r-help-boun...@r-project.org
[mailto:r-help-boun...@r-project.org] On Behalf Of blue sky
Sent: Friday, February 19, 2010 12:11 PM
To: Peter Dalgaard
Cc: r-h...@stat.math.ethz.ch
Subject: Re: [R] What is the difference between expression
and quote whenused with eval()?

On Fri, Feb 19, 2010 at 12:39 PM, Peter Dalgaard
<p.dalga...@biostat.ku.dk>    wrote:

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.

I want to see how expression(something) and quote(something) are
represented in R internally. But it seems that str() doesn't go to
that low level. Is there a way to show the internal representation?

There is also the internal inspect function :

inspect<- function(x, ...) .Internal(inspect(x,...))

inspect( expression(log(1), sqrt(2), trunc(pi)) )
@9657560 20 EXPRSXP g0c2 [NAM(2)] (len=3, tl=153865256)
  @97ab5e8 06 LANGSXP g0c0 []
    @92cf3fc 01 SYMSXP g0c0 [MARK,gp=0x4000] "log"
    @9709a28 14 REALSXP g0c1 [] (len=1, tl=0) 1
  @97aa750 06 LANGSXP g0c0 []
    @92cf204 01 SYMSXP g0c0 [MARK,gp=0x4000] "sqrt"
    @97099e8 14 REALSXP g0c1 [] (len=1, tl=0) 2
  @97aa84c 06 LANGSXP g0c0 []
    @92cf15c 01 SYMSXP g0c0 [MARK,gp=0x4000] "trunc"
    @9347c38 01 SYMSXP g0c0 [MARK,gp=0x4000] "pi"

Where is the internal inspect documented? Would you please help
explain what does '@9657560 20', 'g0c2', 'NAM(2)', 'MARK', 'tl' and
'gp' stand for?

Reading "R internals" gives some clues, otherwise you can read the source, it is only about 200 lines in src/main/inspect.c

--
Romain Francois
Professional R Enthusiast
+33(0) 6 28 91 30 30
http://romainfrancois.blog.free.fr
|- http://tr.im/OIXN : raster images and RImageJ
|- http://tr.im/OcQe : Rcpp 0.7.7
`- http://tr.im/O1wO : highlight 0.1-5

______________________________________________
R-help@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.

Reply via email to