[R] Can elements of a list be passed as multiple arguments?

Peng Yu pengyu.ut at gmail.com
Wed Dec 9 18:14:08 CET 2009


On Tue, Dec 8, 2009 at 11:05 PM, David Winsemius <dwinsemius at comcast.net> wrote:
>
> On Dec 8, 2009, at 11:37 PM, Peng Yu wrote:
>
>> I want to split a matrix, where both 'u' and 'w' are results of
>> possible ways. However, whenever 'n' changes, the argument passed to
>> mapply() has to change. Is there a way to pass elements of a list as
>> multiple arguments?
>
> You need to explain what you want in more detail. In your example mapply did
> exactly what you told it to. No errors. Three matrices. What were you
> expecting when you gave it three lists in each argument?

I want a general solution so that I don't have to always write
"v[[1]], v[[2]], ..., v[[n]]" like in the following, because the
following way would not work if 'n' is an arbitrary number.

w=mapply(function(x,y) {cbind(x,y)}, v[[1]], v[[2]], ..., v[[n]])

One way that I can think of is to somehow expand a list (i.e., v in
this case) to a set of arguments that can be passed to 'mapply()'.

>> m=10
>> n=2
>> k=3
>>
>> set.seed(0)
>> x=replicate(n,rnorm(m))
>> f=sample(1:k, size=m, replace=T)
>>
>> u=split(as.data.frame(x),f)
>>
>> v=lapply(
>>   1:dim(x)[[2]]
>>   , function(i) {
>>     split(x[,i],f)
>>   }
>>   )
>>
>> w=mapply(
>>   function(x,y) {
>>     cbind(x,y)
>>   }
>>   , v[[1]], v[[2]]
>>   )
>
> --
>
> David Winsemius, MD
> Heritage Laboratories
> West Hartford, CT
>
>




More information about the R-help mailing list