[R] How does do.call() work??

Duncan Murdoch murdoch at stats.uwo.ca
Fri Jan 25 12:32:08 CET 2008

Sergey Goriatchev wrote:
> Dear members of R forum,
> Say I have a list:
> L <- list(1:3, 1:3, 1:3)
> that I want to turn into a matrix.
> I wonder why if I do:
> do.call(cbind, L)
> I get the matrix I want, but if I do
> cbind(L)
> I get something different from what I want. Why is that? How does
> do.call() actually work?
The second argument to do.call is "args", a list of arguments to pass to 
the function (cbind in your case).  The function doesn't know what to do 
when you pass it a list, it's expecting separate vectors/matrices.

In your example, do.call(cbind, L) is equivalent to

cbind(L[[1]], L[[2]], L[[3]])
> I've read in do.call() help file this sentence: "The behavior of some
> functions, such as "substitute", will not be the same for functions
> evaluated using do.call as if they were evaluated from the
> interpreter. The precise semantics are currently undefined and subject
> to change. "
substitute() does strange things; cbind uses standard rules, so this 
isn't a problem for it.

Duncan Murdoch
> Thanks for help!
> Sergey

More information about the R-help mailing list