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 > > ______________________________________________ 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.