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


