Hey guys,

I noticed something curious in the lapply call. I'll copy+paste the
function call here because it's short enough:

lapply <- function (X, FUN, ...)
{
    FUN <- match.fun(FUN)
    if (!is.vector(X) || is.object(X))
        X <- as.list(X)
    .Internal(lapply(X, FUN))
}

Notice that lapply coerces X to a list if the !is.vector || is.object(X)
check passes.

Curiously, data.frames fail the test (is.vector(data.frame()) returns
FALSE); but it seems that coercion of a data.frame
to a list would be unnecessary for the *apply family of functions.

Is there a reason why we must coerce data.frames to list for these
functions? I thought data.frames were essentially just 'structured lists'?

I ask because it is generally quite slow coercing a (large) data.frame to a
list, and it seems like this could be avoided for data.frames.

Thanks,
-Kevin

        [[alternative HTML version deleted]]

______________________________________________
R-help@r-project.org mailing list
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.

Reply via email to