David Winsemius wrote: > > On Feb 24, 2009, at 11:36 PM, Fuchs Ira wrote: > >> I was wondering why the following doesn't work: >> >> > a=c(1,2) >> > names(a)=c("one","two") >> > a >> one two >> 1 2 >> > >> > names(a[2]) >> [1] "two" >> > >> > names(a[2])="too" >> > names(a) >> [1] "one" "two" >> > a >> one two >> 1 2 >> >> I must not be understanding some basic concept here. >> Why doesn't the 2nd name change to "too"? > > I cannot tell you why, perhaps you are not actually working with the > names of a, but I can show you that: > > > names(a)[2] <- "too" > > a[2] > too > 2 > > a > one too > 1 2 > > And this is seen as well in the help page examples. The help page also > says the following, which I cannot understand: > > It is possible to update just part of the names attribute via the > general rules: see the examples. This works because the expression > there is evaluated as z <- "names<-"(z, "[<-"(names(z), 3, "c2")). >
the following: names(a[2]) = 'foo' has (partially) a functional flavour, in that you assign to the names of a *copy* of a part of a, while names(a)[2] = 'foo' does not have the flavour, in that you assign to the names of a; it seems, according to the man page you quote, to be equivalent to: a = 'names<-'(a, '[<-.'(names(a), 2, 'foo')) which proceeds as follows: tmp1 = names(a) # get a copy of the names of a, no effect on a tmp2 = '[<-'(tmp1, 2, 'foo') # get a copy of tmp1 with the second element replaced with 'foo' # no effect on either a or tmp1 tmp3 = 'names<-'(a, tmp2) # get a copy of a with its names replaced with tmp2 # no effect on either a, tmp1, or tmp2 a = tmp3 # backassign the result to a vQ ______________________________________________ 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.