[Rd] A where() functions that does what exists() does but return the environment when object lives?

Hadley Wickham h.wickham at gmail.com
Tue Oct 13 23:43:10 CEST 2015


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.bengtsson at 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 at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel



-- 
http://had.co.nz/



More information about the R-devel mailing list