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

Bert Gunter bgunter.4567 at gmail.com
Fri Jul 10 19:50:06 CEST 2015


I'll let Bill respond in detail if he cares to(he is both more
knowledgable and fluent at this than I), but as a nearly unbreakable
rule, get() and assign() should not be used in R. Basically, they
represent a macro (script)-oriented strategy for handling R's objects,
whereas R is designed to use an object-oriented ("everything is an
object") and functional ("all procedures are functions") approach.
Using get() and assign() leads to messy, confusing, error-prone,
non-portable code in R, and that's why they should be avoided.

For details, you should consult web tutorials, John Chambers's books,
and other books on R programming.

Cheers,
Bert


Bert Gunter

"Data is not information. Information is not knowledge. And knowledge
is certainly not wisdom."
   -- Clifford Stoll


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.
>
> ______________________________________________
> 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