playing with 'names<-', i observed the following: x = 1 names(x) # NULL 'names<-'(x, 'foo') # c(foo=1) names(x) # NULL
where 'names<-' has a functional flavour (does not change x), but: x = 1:2 names(x) # NULL 'names<-'(x, 'foo') # c(foo=1, 2) names(x) # "foo" NA where 'names<-' seems to perform a side effect on x (destructively modifies x). furthermore: x = c(foo=1) names(x) # "foo" 'names<-'(x, NULL) names(x) # NULL 'names<-'(x, 'bar') names(x) # "bar" !!! x = c(foo=1) names(x) # "foo" 'names<-'(x, 'bar') names(x) # "bar" !!! where 'names<-' is not only able to destructively remove names from x, but also destructively add or modify them (quite unlike in the first example above). analogous code but using 'dimnames<-' on a matrix performs a side effect on the matrix even if it initially does not have dimnames: x = matrix(1,1,1) dimnames(x) # NULL 'dimnames<-'(x, list('foo', 'bar')) dimnames(x) # list("foo", "bar") this is incoherent with the first example above, in that in both cases the structure initially has no names or dimnames attribute, but the end result is different in the two examples. is there something i misunderstand here? there is another, minor issue with names: 'names<-'(1, c('foo', 'bar')) # error: 'names' attribute [2] must be the same length as the vector [1] 'names<-'(1:2, 'foo') # no error since ?names says that "If 'value' is shorter than 'x', it is extended by character 'NA's to the length of 'x'" (where x is the vector and value is the names vector), the error message above should say that the names attribute must be *at most*, not *exactly*, of the length of the vector. regards, vQ ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel