[Rd] Create an environment and assign objects to it in one go?

Henrik Bengtsson hb at biostat.ucsf.edu
Thu Mar 10 18:21:55 CET 2011


Hi,

thanks to both of you.  My use case was actually to in-the-end create
a *list* in a cut'n'paste-friendly way, e.g.

env <- function(..., hash=FALSE, parent=parent.frame(), size=29L) {
  envir <- new.env(hash=hash, parent=parent, size=size);
  evalq(..., envir=envir);
  envir;
} # env()


x <- list();

x$case1 <- env({
  # Cut'n'pasted from elsewhere
  a <- 1;
  b <- 2;
});

x$case2 <- env({
  # Cut'n'pasted from elsewhere
  a <- 3;
  b <- 1;
});

x <- lapply(x, FUN=as.list);

> str(x)
List of 2
 $ case1:List of 2
  ..$ b: num 2
  ..$ a: num 1
 $ case2:List of 2
  ..$ b: num 1
  ..$ a: num 3

/Henrik


On Thu, Mar 10, 2011 at 5:53 AM, Gabor Grothendieck
<ggrothendieck at gmail.com> wrote:
> On 3/10/11, Henrik Bengtsson <hb at biostat.ucsf.edu> wrote:
>> Hi,
>>
>> I've just created:
>>
>> newEnvEval <- function(..., hash=FALSE, parent=parent.frame(), size=29L) {
>>   envir <- new.env(hash=hash, parent=parent, size=size);
>>   evalq(..., envir=envir);
>>   envir;
>> } # newEnvEval()
>>
>> so that I can create an environment and assign objects to it in one go, e.g.
>>
>> env <- newEnvEval({ a <- 1; b <- 2; });
>> print(env$a);
>>
>> Does this already exists somewhere?
>>
>> /Henrik
>>
>
> You can do this:
>
>   e <- as.environment(list(a = 1, b = 2))
>   e$a; e$b
>
> or since proto objects are environments (but the $ has slightly
> different semantics when applied to functions):
>
>   library(proto)
>   p <- proto(a = 1, b = 2, expr = { c <- 3 })
>   p$a; p$b; p$c
>
>
>
>
> --
> Statistics & Software Consulting
> GKX Group, GKX Associates Inc.
> tel: 1-877-GKX-GROUP
> email: ggrothendieck at gmail.com
>
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>



More information about the R-devel mailing list