[R] data.frame() versus as.data.frame() applied to a matrix.

Rolf Turner r@turner @end|ng |rom @uck|@nd@@c@nz
Wed Feb 6 00:52:46 CET 2019

On 2/6/19 12:27 PM, Jeff Newmiller wrote:

> 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.

Fair enough.  My real problem was getting ambushed by the fact that 
*different* names arise depending on whether one uses data.frame(X)
or as.data.frame(X).  I'll spare you the details. :-)



> On February 5, 2019 2:22:24 PM PST, Rolf Turner
> <r.turner using 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?

More information about the R-help mailing list