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.