Hi, I'm trying to understand environment object in R. I used the example: f <- function(x) { y <- 10 g <- function(x) x + y return(g) } h <- f() h(3) then i saw that f return an environment> hfunction(x) x + y <environment: 01B28570> but I coudn't access to x and y object in that environment: I tried get("x",env=h) I tried h$y can I access y and x? how can I see an environment tree? oes search does it? Thanks, Ron
Try 'get("x", env = environment(h))' -roger Ron Ophir wrote:> Hi, > I'm trying to understand environment object in R. > I used the example: > f <- function(x) { > y <- 10 > g <- function(x) x + y > return(g) > } > h <- f() > h(3) > then i saw that f return an environment > >>h > > function(x) x + y > <environment: 01B28570> > but I coudn't access to x and y object in that environment: > I tried > get("x",env=h) > I tried > h$y > can I access y and x? > how can I see an environment tree? oes search does it? > Thanks, > Ron > > ______________________________________________ > R-help at stat.math.ethz.ch mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html >-- Roger D. Peng http://www.biostat.jhsph.edu/~rpeng/
"Ron Ophir" <ron.ophir at weizmann.ac.il> writes:> Hi, > I'm trying to understand environment object in R. > I used the example: > f <- function(x) { > y <- 10 > g <- function(x) x + y > return(g) > } > h <- f() > h(3) > then i saw that f return an environment > > h > function(x) x + y > <environment: 01B28570> > but I coudn't access to x and y object in that environment: > I tried > get("x",env=h) > I tried > h$y > can I access y and x?Well, there are special issues with x above, but the basic thing is to take environment(h). Notice that h _is_ a function that _has_ an associated environment.> get("y",env=environment(h))[1] 10 As I said, x is stranger, which is because you used f() in the call:> get("x",env=environment(h))> str(get("x",env=environment(h)))symbol> a <- get("x",env=environment(h)) > missing(a)[1] TRUE> evalq(x,environment(h))Error in eval(expr, envir, enclos) : argument "x" is missing, with no default> evalq(missing(x),environment(h))[1] TRUE You'll get the point if you look long and hard enough...> how can I see an environment tree?You can't. You can see the parent of an environment, the grandparent, etc., but there is no way to see which children a given environment has.> oes search does it?Huh?> Thanks, > Ron > > ______________________________________________ > R-help at stat.math.ethz.ch mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html >-- 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
Thank you Peter, for the comprehensive explanation. The reason I asked Does '"search" do it?' is that as I can run ls(env=environment(h)) I can run ls(env=environment("package:methods")) or ls("package:methods") which I can see by search. I thought maybe what I see by search is all the environments under .GobalEnv which I understan this is not what I see by search. Thanks Ron>>> Peter Dalgaard <p.dalgaard at biostat.ku.dk> 09/27/05 11:49 PM >>>"Ron Ophir" <ron.ophir at weizmann.ac.il> writes:> Hi, > I'm trying to understand environment object in R. > I used the example: > f <- function(x) { > y <- 10 > g <- function(x) x + y > return(g) > } > h <- f() > h(3) > then i saw that f return an environment > > h > function(x) x + y > <environment: 01B28570> > but I coudn't access to x and y object in that environment: > I tried > get("x",env=h) > I tried > h$y > can I access y and x?Well, there are special issues with x above, but the basic thing is to take environment(h). Notice that h _is_ a function that _has_ an associated environment.> get("y",env=environment(h))[1] 10 As I said, x is stranger, which is because you used f() in the call:> get("x",env=environment(h))> str(get("x",env=environment(h)))symbol> a <- get("x",env=environment(h)) > missing(a)[1] TRUE> evalq(x,environment(h))Error in eval(expr, envir, enclos) : argument "x" is missing, with no default> evalq(missing(x),environment(h))[1] TRUE You'll get the point if you look long and hard enough...> how can I see an environment tree?You can't. You can see the parent of an environment, the grandparent, etc., but there is no way to see which children a given environment has.> oes search does it?Huh?> Thanks, > Ron > > ______________________________________________ > R-help at stat.math.ethz.ch mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html >-- O__ ---- Peter Dalgaard 伱榮ter 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