[R] assign a value to an element

William Dunlap wdunlap at tibco.com
Sun Mar 18 19:37:18 CET 2012


Do not use assign().  It is a relic from the 1980s.

Instead, decide where you want your
variables to live, perhaps in a list,
   where<-list()
or perhaps in an environment,
   where<-new.env()
or
  where<-environment().
Then use where[[varName]] to refer to the variable.  You can
use further subsetting functions on that.  E.g.,
   where <- environment() # the current environment
   varName <- "qwerty"
   where[[varName]] <- 1:10
   where[[varName]][2:3] <- log(where[[varName]][9:10])
   where[[varName]] 
   # [1]  1.000000  2.197225  2.302585  4.000000
   # [5]  5.000000  6.000000  7.000000  8.000000
   # [9]  9.000000 10.000000

Bill Dunlap
Spotfire, TIBCO Software
wdunlap tibco.com


> -----Original Message-----
> From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On Behalf
> Of Marc Girondot
> Sent: Sunday, March 18, 2012 11:25 AM
> To: r-help at r-project.org
> Subject: [R] assign a value to an element
> 
> Assign can be used to set a value to a variable that has name as a value of another
> variable. Example:
> 
> > name<-"essai"
> > assign(name, "plouf")
> > essai
> [1] "plouf"
> 
> OK.
> But how to do the same when it is only an element of a vector, data frame and so on
> that must be changed.
> 
> > vec<-1:10
> > vec
>  [1]  1  2  3  4  5  6  7  8  9 10
> > vec[4]
> [1] 4
> > name<-"vec[4]"
> > assign(name, 100)
> > vec
>  [1]  1  2  3  4  5  6  7  8  9 10
> 
> The reason is probably here (from help of assign):
> assign does not dispatch assignment methods, so it cannot be used to set elements of
> vectors, names, attributes, etc.
> 
> 
> I have found this solution:
> > eval(parse(text=paste(name, "<-100", sep="")))
> > vec
>  [1]   1   2   3 100   5   6   7   8   9  10
> 
> Is-it the only way ? It is not very elegant !
> 
> Thanks a lot
> 
> Marc
> 
> __________________________________________________________
> Marc Girondot, Pr
> 
> Laboratoire Ecologie, Systématique et Evolution
> Equipe de Conservation des Populations et des Communautés
> CNRS, AgroParisTech et Université Paris-Sud 11 , UMR 8079
> Bâtiment 362
> 91405 Orsay Cedex, France
> 
> Tel:  33 1 (0)1.69.15.72.30   Fax: 33 1 (0)1.69.15.73.53
> e-mail: marc.girondot at u-psud.fr
> Web: http://www.ese.u-psud.fr/epc/conservation/Marc.html
> Skype: girondot
> 	[[alternative HTML version deleted]]



More information about the R-help mailing list