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

Richard M. Heiberger rmh @end|ng |rom temp|e@edu
Wed Feb 6 01:18:54 CET 2019


To me the interesting difference between matrix() and as.matrix() is
that as.matrix() retains the argument names as the rows names of the
result.
> tmp <- structure(1:3, names=letters[1:3])
> tmp
a b c
1 2 3
> matrix(tmp)
     [,1]
[1,]    1
[2,]    2
[3,]    3
> as.matrix(tmp)
  [,1]
a    1
b    2
c    3
>

On Tue, Feb 5, 2019 at 6:53 PM Rolf Turner <r.turner using auckland.ac.nz> wrote:
>
>
> 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. :-)
>
> cheers,
>
> Rolf
>
> >
> > 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?
>
> ______________________________________________
> R-help using 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.



More information about the R-help mailing list