[R] concatenating lists (and functions with multiple args)

Matthew Wiener mcw at ln.nimh.nih.gov
Thu Mar 15 16:13:20 CET 2001


Here's another possibility:

foo <- function(x,y){
	if(is.list(x)) x <- as.list(x)
	else x <- list(x)

	if(is.list(y)) y <- as.list(y)
	else y <- list(y)

	c(x,y)
}

The if - else clause unnests a nested list or turns a single vector into a
list.  Leaving either one out causes trouble in this example.  

I've checked that this code also successfully combines xyz with another
vector w. 


Now a follow-up question.  What I'd really like to know how to do (and
haven't been able to figure out from the documentation) is how to write an
equivalent version of this function that takes an arbitrary number of
arguments.  I've looked at the code for (for example) sum, which takes
"..." as an argument, but it just refers to internal code. 

Is there an easy way to do this in R code?  Have I missed some of the
documentation that explains this?

Thanks for any help,

Matt Wiener




On Thu, 15 Mar 2001, Jan Goebel wrote:

> Hello Faheem,
> 
> On Wed, 14 Mar 2001, Faheem Mitha wrote:
> 
> > 
> > Dear People,
> > 
> > I have been trying to perform concatenation operations on lists without
> > success. Consider the following example.
> > 
> > > x <- runif(2)
> > > y <- runif(2)
> > > z <- runif(2)
> > > xy <- list(x,y)
> > > xyz <- list(x,y,z)
> > 
> > I want to have a function foo such that foo(xy,z) is the same as xyz. This
> > appears not to be as easy as I thought, though there must be a way.
> 
> Maybe this can give you a starting point.
> I guess their are more elegant ways to do this ...
> 
> > clist  <- function (liste, x) {
> + 
> +   tmp <- paste("list(",
> +                paste(paste("liste[[",1:length(liste),"]]",sep=""),
> +                      collapse=","),",x)",sep="") 
> +   eval(parse(text=tmp))  
> + }
> > 
> > clist(xy,z)
> [[1]]
> [1] 0.6855152 0.5541156
> 
> [[2]]
> [1] 0.19300487 0.07686829
> 
> [[3]]
> [1] 0.4915225 0.9025518
> 
> best
> 
> jan
> -- 
> +-----------------------------------
>  Jan Goebel (mailto:jgoebel at diw.de)
> 
>  DIW Berlin 
>  Longitudinal Data and Microanalysis
>  Königin-Luise-Str. 5
>  D-14195 Berlin -- Germany --
>  phone: 49 30 89789-377
> +-----------------------------------
> -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
> r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
> Send "info", "help", or "[un]subscribe"
> (in the "body", not the subject !)  To: r-help-request at stat.math.ethz.ch
> _._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._
> 

-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-help-request at stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._



More information about the R-help mailing list