learning R
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