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

Bastien Tran bastien.tran at gmail.com
Fri Jul 10 18:44:12 CEST 2015


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.



More information about the R-help mailing list