[R] How to assign value to a variable dynamically constructed

William Dunlap wdunlap at tibco.com
Fri Jul 10 18:58:59 CEST 2015


Yes, assign() and get() can do this, but I think the [[]] syntax is simpler
and makes it easier to switch between lists and environments for
data organization.

E.g., the translation of
   myData[[varName]][4] <- myData[[varName]][4] * 100
where myData is an environment to the get/assign style
would be something like
   tmp <- get(varName, envir=myData)
   tmp[4] <- tmp[4] * 100
   assign(varName, tmp, envir=myData)

Bill Dunlap
TIBCO Software
wdunlap tibco.com

On Fri, Jul 10, 2015 at 9:44 AM, Bastien Tran <bastien.tran at gmail.com>
wrote:

> Dear all,
>
> Provided I understood correctly, shouldn't assign() do the trick? Most
> similar threads seem to include this approach (among others, indeed).
>
> Regards,
> Bastien
>
>
> On Wednesday, July 8, 2015 at 7:30:04 PM UTC+2, William Dunlap wrote:
> > You can use an environment instead of a list using the same [[ syntax.
> It
> > is like 'get0(..., inherit=FALSE)' on the left side of the <- and like
> > 'assign(...)' on the right side.   E.g.,
> >    myData <- new.env()
> >    varName <- "v1"
> >    myData[[varName]] <- 1:10
> >    myData[[varName]][4] <- myData[[varName]][4] * 100
> >    myData[[varName]]
> >    #  [1]   1   2   3 400   5   6   7   8   9  10
> >    names(myData)
> >    # [1] "v1"
> > (Before R-3.2.0 or so, you had to use objects(myData,all=TRUE) if
> > myData was an environment and names(myData) if it was a list.  Now
> > names() works for environments.)
> >
> > It is better to use a dedicated environment (or list) for each set of
> > related
> > variables so that name collisions do not cause problems.
> >
> >
> > Bill Dunlap
> > TIBCO Software
> > wdunlap tibco.com
> >
> > On Wed, Jul 8, 2015 at 10:06 AM, Greg Snow <538280 at gmail.com> wrote:
> >
> > > This is FAQ 7.21.
> > >
> > > The most important part of the answer in FAQ 7.21 is the last section
> > > where it states that it is often easier to use a list rather than
> > > messing around with trying to dynamically name global variables.
> > >
> > > If you tell us what you are trying to accomplish then we may have
> > > better advice.  The route you are headed down now usually leads to
> > > inefficient code and hard to find bugs.
> > >
> > > On Tue, Jul 7, 2015 at 2:53 PM, Jun Shen <jun.shen.ut at gmail.com>
> wrote:
> > > > Dear list,
> > > >
> > > > Let's say we have a variable (id), whose name is dynamically
> constructed.
> > > > This variable represents a vector or data frame with many elements.
> Now I
> > > > want to specifically assign a value to one of the elements. I
> couldn't
> > > get
> > > > it right.
> > > >
> > > > test <- 'id' # "id" is dynamically constructed through paste()
> > > >
> > > > id <- 1:4
> > > >
> > > > # I can get the element by doing
> > > >
> > > > get(test)[2]
> > > >
> > > > # Now I want to assign a value to the second element of this
> dynamical
> > > > variable.
> > > >
> > > > get(test)[2] <- 5  # doesn't work.
> > > >
> > > > Thanks a lot.
> > > >
> > > > Jun Shen
> > > >
> > > >         [[alternative HTML version deleted]]
> > > >
> > > > ______________________________________________
> > > > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
> > > > https://stat.ethz.ch/mailman/listinfo/r-help
> > > > PLEASE do read the posting guide
> > > http://www.R-project.org/posting-guide.html
> > > > and provide commented, minimal, self-contained, reproducible code.
> > >
> > >
> > >
> > > --
> > > Gregory (Greg) L. Snow Ph.D.
> > > 538280 at gmail.com
> > >
> > > ______________________________________________
> > > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
> > > https://stat.ethz.ch/mailman/listinfo/r-help
> > > PLEASE do read the posting guide
> > > http://www.R-project.org/posting-guide.html
> > > and provide commented, minimal, self-contained, reproducible code.
> > >
> >
> >       [[alternative HTML version deleted]]
> >
> > ______________________________________________
> > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
> > https://stat.ethz.ch/mailman/listinfo/r-help
> > PLEASE do read the posting guide
> http://www.R-project.org/posting-guide.html
> > and provide commented, minimal, self-contained, reproducible code.
>
>

	[[alternative HTML version deleted]]



More information about the R-help mailing list