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.