surprising behaviour of names<-
(B) you cannot (easily) predict whether or not x will be modified destructively
that's fine, thanks, but i must be terribly stupid as i do not see how this explains the examples above. ?where is the x used by something else in the first example, so that 'names<-'(x, 'foo') does *not* modify x destructively, while it does in the other cases? i just can't see how your explanation fits the examples -- it probably does, but i beg you show it explicitly.
I think the following shows what Peter was referring to: In this case, there is only one pointer to the value of x: x <- c(1,2)
"names<-"(x,"foo")
foo <NA> 1 2
x
foo <NA> 1 2 In this case, there are two:
x <- c(1,2) y <- x "names<-"(x,"foo")
foo <NA> 1 2
x
[1] 1 2
y
[1] 1 2
It seems as though `names<-` and the like cannot be treated as R
functions (which do not modify their arguments) but as special
internal routines which do sometimes modify their arguments.
-s