I have no idea about "why it is this way" but there are many cases where I would rather have to use backticks around syntactically-invalid names than deal with arbitrary rules for mapping column names as they were supplied to column names as R wants them to be. From that perspective, making the conversion function leave the names alone and limit the name-mashing to one function sounds great to me. You can always call make.names yourself.
On February 5, 2019 2:22:24 PM PST, Rolf Turner <r.tur...@auckland.ac.nz> wrote: > >Consider the following: > >set.seed(42) >X <- matrix(runif(40),10,4) >colnames(X) <- c("a","b","a:x","b:x") # Imitating the output > # of model.matrix(). >D1 <- as.data.frame(X) >D2 <- data.frame(X) >names(D1) >[1] "a" "b" "a:x" "b:x" >names(D2) >[1] "a" "b" "a.x" "b.x" > >The names of D2 are syntactically valid; those of D1 are not. > >Why should I have expected this phenomenon? :-) > >The as.data.frame() syntax seems to me much more natural for converting > >a matrix to a data frame, yet it doesn't get it quite right, sometimes, >in respect of the names. > >Is there some reason that as.data.frame() does not apply make.names()? >Or was this just an oversight? > >cheers, > >Rolf Turner -- Sent from my phone. Please excuse my brevity. ______________________________________________ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see 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.