Seems easy enough to write yourself: where <- function(x, env = parent.frame()) { if (identical(env, emptyenv())) return(NULL) if (exists(x, envir = env, inherits = FALSE)) return(env) where(x, parent.env(env)) }
sample2 <- base::sample where("sample2") #> <environment: 0x1154d3c28> where("sample") #> <environment: base> where("blah") #> NULL Hadley On Fri, Oct 9, 2015 at 6:18 PM, Henrik Bengtsson <henrik.bengts...@ucsf.edu> wrote: > Hi, > > exists("foo", inherits=TRUE) check whether an object named "foo" > exists, and get("foo", inherits=TRUE) retrieves it. I'm looking for a > similar function to exists() that returns the environment where the > object "foo" exists, iff at all. If not found, NULL is returned. > Does that exist? > > EXAMPLE #1: > >> sample2 <- base::sample >> env <- where("sample2", inherits=TRUE) >> env > <environment: R_GlobalEnv> > > Note the difference to: > >> obj <- get("sample2", inherits=TRUE) >> environment(obj) > <environment: namespace:base> > > > EXAMPLE #2: > >> a <- 1 >> foo <- function() { b <- 2; list(a=where("a", inherits=TRUE), b=where("b", >> inherits=TRUE)) } >> foo() > $a > <environment: R_GlobalEnv> > $b > <environment: 0x000000000b7d2798> > >> foo() > $a > <environment: R_GlobalEnv> > $b > <environment: 0x000000000b7d23e0> > > > I do understand that I can implement such a function myself, but I > prefer not to. > > Thanks, > > Henrik > > ______________________________________________ > R-devel@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel -- http://had.co.nz/ ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel