[R] learning R

markleeds at verizon.net markleeds at verizon.net
Wed Feb 25 09:48:04 CET 2009


  David, Wacek: Just so everyone knows, I just looked and this is 
explained quite clearly in the R Language Reference manual, very 
similarly to what Wacek did below.

On Wed, Feb 25, 2009 at  3:42 AM, Wacek Kusnierczyk wrote:

> 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 at 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.




More information about the R-help mailing list