White.Denis at epamail.epa.gov writes:
Is the difference in behavior below, introduced in 1.8, inconsistent
at least, undesirable? I couldn't find this in the NEWS.
On the one hand,
a <- matrix (1:4, nrow=2)
a <- data.frame (a)
names (a) <- c("break","next")
names (a)
[1] "break" "next"
On the other,
a <- matrix (1:4, nrow=2)
dimnames(a) <- list (1:2, c("break","next"))
a <- data.frame (a)
names(a)
Works fine if you don't use keywords as column names
a <- matrix (1:4, nrow=2)
dimnames(a) <- list (1:2, c("foo","bar"))
b <- data.frame(a)
names(b)
[1] "foo" "bar"
The difference in the result for your example has to do with an extra
step in the second case to obtain a legitimate name that can be used
with the $ operator. R generates a syntax error for
a$break
but not for
a$break.
Ok, I'll regard it as an inconsistency that the conversion of dimnames
to data frame column names changes reserved words to legitimate names
but direct assignment doesn't.