[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