[Rd] Bug is as.matrix.data.frame with nested data.frame

Martin Maechler maechler at stat.math.ethz.ch
Fri Dec 1 10:00:34 CET 2017

>>>>> Patrick Perry <pperry at stern.nyu.edu>
>>>>>     on Thu, 30 Nov 2017 22:45:21 -0500 writes:

    > Converting a data.frame with a nested data.frame to a matrix fails:
    > x <- structure(list(a = data.frame(letters)),
    > class = "data.frame",
    > row.names = .set_row_names(26))

    > as.matrix(x)
    > #> Error in ncol(xj) : object 'xj' not found

    > The offending code is here, in the definition of as.matrix.data.frame 
    > (source/base/all.R):
    ^^^^^^^^^^^^^^^^^^^^^^ that's *not* file from the sources of R !

    > for (j in pseq) {
    >    if (inherits(X[[j]], "data.frame") && ncol(xj) > 1L)
    >        X[[j]] <- as.matrix(X[[j]])
    >    xj <- X[[j]]

    > It should be ncol(X[[j]]), not ncol(xj). 

yes (or something similar ..)
Interesting, that this has not been detected earlier.

[ OTOH, who nests data.frames inside data.frames? ]

If I fix the above, there's a next "bug" preventing
as.matrix(x)  to work for your case.

I'll look into it.
   > Also, the code would be more 
    > generic if it used is.data.frame here instead of inherits(, "data.frame").

No, that is not true as is.data.frame() is not generic, and base
functions call base, so there can't be a difference.


More information about the R-devel mailing list