| % File src/library/base/man/list2env.Rd |
| % Part of the R package, https://www.R-project.org |
| % Copyright 2010 R Core Team |
| % Distributed under GPL 2 or later |
| |
| \name{list2env} |
| \alias{list2env} |
| \title{From A List, Build or Add To an Environment} |
| \description{ |
| From a \emph{named} \code{\link{list} x}, create an |
| \code{\link{environment}} containing all list components as objects, or |
| \dQuote{multi-assign} from \code{x} into a pre-existing environment. |
| } |
| \usage{ |
| list2env(x, envir = NULL, parent = parent.frame(), |
| hash = (length(x) > 100), size = max(29L, length(x))) |
| } |
| \arguments{ |
| \item{x}{a \code{\link{list}}, where \code{\link{names}(x)} must |
| not contain empty (\code{""}) elements.} |
| \item{envir}{an \code{\link{environment}} or \code{NULL}.} |
| \item{parent}{(for the case \code{envir = NULL}): a parent frame aka |
| enclosing environment, see \code{\link{new.env}}.} |
| \item{hash}{(for the case \code{envir = NULL}): logical indicating |
| if the created environment should use hashing, see \code{\link{new.env}}.} |
| \item{size}{(in the case \code{envir = NULL, hash = TRUE}): hash size, |
| see \code{\link{new.env}}.} |
| } |
| \details{ |
| This will be very slow for large inputs unless hashing is used on the |
| environment. |
| |
| Environments must have uniquely named entries, but named lists need |
| not: where the list has duplicate names it is the \emph{last} element |
| with the name that is used. Empty names throw an error. |
| } |
| \value{ |
| An \code{\link{environment}}, either newly created (as by |
| \code{\link{new.env}}) if the \code{envir} argument was \code{NULL}, |
| otherwise the updated environment \code{envir}. Since environments |
| are never duplicated, the argument \code{envir} is also changed. |
| } |
| \author{Martin Maechler} |
| \seealso{ |
| \code{\link{environment}}, \code{\link{new.env}}, |
| \code{\link{as.environment}}; further, \code{\link{assign}}. |
| |
| The (semantical) \dQuote{inverse}: \code{\link{as.list.environment}}. |
| } |
| \examples{ |
| L <- list(a = 1, b = 2:4, p = pi, ff = gl(3, 4, labels = LETTERS[1:3])) |
| e <- list2env(L) |
| ls(e) |
| stopifnot(ls(e) == sort(names(L)), |
| identical(L$b, e$b)) # "$" working for environments as for lists |
| |
| ## consistency, when we do the inverse: |
| ll <- as.list(e) # -> dispatching to the as.list.environment() method |
| rbind(names(L), names(ll)) # not in the same order, typically, |
| # but the same content: |
| stopifnot(identical(L [sort.list(names(L ))], |
| ll[sort.list(names(ll))])) |
| |
| ## now add to e -- can be seen as a fast "multi-assign": |
| list2env(list(abc = LETTERS, note = "just an example", |
| df = data.frame(x = rnorm(20), y = rbinom(20, 1, pr = 0.2))), |
| envir = e) |
| utils::ls.str(e) |
| } |
| \keyword{data} |