On Mar 18, 2012, at 2:24 PM, Marc Girondot wrote:
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.
Yes and further, vec[4] in your example does not have a name, since  
you created vect as an unnamed vector. It's not generally optimal  
practice to build up strings and pass them to eval(parse()).
However there is some assignment possible by name to data.frame rows  
with "["
> vecdf <- data.frame(vec=vec)
> vecdf['a' , ] <- 20
> vecdf
  vec
a  20
b  10
c   3
d   4
e   5
f   6
g   7
h   8
i   9
j  10

Where the rowname value is used as the index for assignment. Is that sufficiently elegant?
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

David Winsemius, MD
West Hartford, CT

______________________________________________
R-help@r-project.org mailing list
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.

Reply via email to