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
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