On 5/23/2008 2:22 PM, Patrick Burns wrote:
The two statements below with 'names' are conceptually
the same.  The second performs the desired operation
while the first does not.

 > xx <- list(A=c(a=1, b=2))
 > names(xx$A[1]) <- "changed"
 > xx
$A
a b
1 2

 > names(xx$A)[1] <- "changed"
 > xx
$A
changed       b
      1       2

This is observed in 2.4.0 on Linux as well as 2.7.0 and
2.8.0  on Windows XP.

Those aren't the same. The first one says to extract the first element of xx$A and set its names. The second says to set the first name of xx$A.

Remember that names(x) <- y is the same as

*tmp* <- x
x <- `names<-`(*tmp*, y)

which in your first case expands to

*tmp* <- xx$A[1]
xx$A[1] <- `names<-`(*tmp*, "changed")

But assigning a named number to a numeric vector has no effect on the names. It would be like

xx <- c(a=1, b=2)
xx[1] <- c(d=1)

which has no effect on xx.

Duncan Murdoch

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to