On Jul 27, 2012, at 11:23 , Stéphane Dray wrote:

> Dear list,
> 
> I try to use the eval function and to understand its functionning. I tried:
> 
> xy <- "global"
> 
> f1 <- function(){
>  xy <- "f1"
>  a1 <- eval.parent(xy)
>  b1 <- eval(xy, sys.frame(0))
>  print(paste("a1 =",a1))
>  print(paste("b2 =",b1))
> 
>  f3 <- function(){
>    print("----F3----")
>    a3 <- eval.parent(xy)
>    b3 <- eval(xy, sys.frame(0))
>    print(paste("a3 =",a3))
>    print(paste("b3 =",b3))
>    }
> 
> f2()
> f3()
> }
> 
> 
> f2 <- function(){
>  print("----F2----")
>  a2 <- eval.parent(xy)
>  b2 <- eval(xy, sys.frame(0))
>  print(paste("a2 =",a2))
>  print(paste("b2 =",b2))
> }
> 
> f1()
> f2()
> 
> 
> I obtain the following results (and add as comments what I would expect after 
> reading the doc). I really do not understand why the evaluation in 
> sys.frame(0) (i.e. global environment) did not work. Moreover, the evaluation 
> through eval.parent should be linked to the environment of the caller and not 
> the definition (so I do not understand why f2 and f3 produces different 
> results).
> 
> > f1()
> [1] "a1 = f1" ## global ?
> [1] "b2 = f1" ## global
> [1] "----F2----"
> [1] "a2 = global" ## f1
> [1] "b2 = global" ## global
> [1] "----F3----"
> [1] "a3 = f1"  ## f1
> [1] "b3 = f1" ## global
> > f2()
> [1] "----F2----"
> [1] "a2 = global"
> [1] "b2 = global"
> 
> 
> 
> Any help would be appreciated, Thanks.

Try quote(xy) in a number of places....

-- 
Peter Dalgaard, Professor,
Center for Statistics, Copenhagen Business School
Solbjerg Plads 3, 2000 Frederiksberg, Denmark
Phone: (+45)38153501
Email: pd....@cbs.dk  Priv: pda...@gmail.com

______________________________________________
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