data.frame(I(matrix)) ? (PR#388)
Thomas Lumley
thomas@biostat.washington.edu
Thu, 23 Dec 1999 18:44:45 +0000 (GMT)
On Thu, 23 Dec 1999 jens.oehlschlaegel-akiyoshi@mdfactory.de wrote:
>
>
> I observe dificulties with using data.frame(I(matrix))
>
> > mat <- matrix(letters, 2, 2)
> > dimnames(mat) <- list(c(1:2), c("x","y"))
> > mat
> x y
> 1 "a" "c"
> 2 "b" "d"
>
> > dd <- data.frame(I(mat))
> > ddd
> I.mat..x I.mat..y
> 1 a a
> 2 b b
> 3 c c
>
> doesn't look too bad,
> but,
> has only one column name:
>
> > dimnames(dd)
> [[1]]
> [1] "1" "2"
>
> [[2]]
> [1] "I.mat."
>
> and unexpected structure
> > str(ddd)
> `data.frame': 3 obs. of 1 variable:
> $ I.mat.: chr [1:3, 1:2] "a" "b" "c" "a" "b" "c"
> ..- attr(*, "dimnames")=List of 2
> .. ..$ : NULL
> .. ..$ : chr "x" "y"
> ..- attr(*, "class")= chr "AsIs"
> >
>
> column 1 is a matrix
> > ddd[,1]
> x y
> [1,] "a" "a"
> [2,] "b" "b"
> [3,] "c" "c"
> attr(,"class")
> [1] "AsIs"
>
> This dataframe is not a simple list with each element representing one
> column.
>
> Consequently, e.g.
>
> > sapply(ddd, FUN=function(x)x)
> I.mat.
> [1,] "a"
> [2,] "b"
> [3,] "c"
> [4,] "a"
> [5,] "b"
> [6,] "c"
>
This is the Right Thing: we use the fact that multicolumn things can be a
single column of a data frame in logistic regression and extensively in
the survival analysis functions (and probably other places). However, it
does make it hard to turn a character matrix into a data frame. Perhaps
there should be an option of some sort?
-thomas
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-devel mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !) To: r-devel-request@stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._