[R] Splitting a set of vectors in a list (Solved )

John Kane jrkrideau at yahoo.ca
Fri Mar 14 18:57:56 CET 2008


--- "Liaw, Andy" <andy_liaw at merck.com> wrote:

> From: John Kane 
>  
> > --- "Liaw, Andy" <andy_liaw at merck.com> wrote:
> > 
> > > From: Bert Gunter
> > >  
> > > > ?"["  ?InternalMethods
> > > > 
> > > > x[i,j] is just shorthand for  "["(x,i,j) .
> > > (AFAIK)**All** operators
> > > > (+,-,...,subscripting,...) in R are functions,
> > > stemming from 
> > > > its LISP-like
> > > > heritage, and can actually called by the usual
> > > functional 
> > > > syntax, f(...),
> > > > instead of the operator syntax.
> > > 
> > > That is true even for assignment:
> > > 
> > > R> "<-"(junk, 1:3)
> > > R> junk
> > > [1] 1 2 
> > Okay I think I've got this one but
> > 
> > > and "{":
> > >
> > > R> "{"(1, 2, 3)
> > this defeats me. I see what it is doing but I have
> not
> > the slightest idea why . 
> > 
> > I had a look at ?"{" and if I am understanding the
> > example {2+3; 4+5}  what is happening is that
> anything
> > within the {} is being executed as separate
> statments
> > but I have not the slightest idea of what is
> happening
> > when "{"(1, 2, 3) returns 3.  
> 
> The value of "{" is simply the last statement
> inside.  This is basically
> the reason why when one writes a function, one can
> simply type the name
> of the object (or the expression) to be returned as
> the last line,
> instead of having to wrap that in return().

Very simple when explained. Thanks very much. 

So then, all that } is doing is signifiying the end of
{ ?  


> 
> > The other thing is, is it worth trying to figure
> out
> > what appears to be rather esotheric coding if I
> can do
> > the same with more intuitively understood albeit
> > clumsier code? 
> 
> I do not believe anyone in his/her right mind would
> write code that way
> (except those with very developed left brain that
> can code in LISP-like
> languages).  To me the point is more about
> understanding what these
> things do, so you can use them in perhaps some
> creative ways (but not to
> the point of abusing it, of course).
> 
> Andy


Given some of the responses in R-help a naive user
like should perhaps be excused for thinking that some
of the things are writen is a slightly esorteric
manner.

>  
> > > 
> > > I believe this is in the (draft) R Language
> > > Definition, part of the
> > > official manuals that shipped with R.
> > > 
> > > Andy
> > >  
> > > > Not sure where this is explicitly discussed
> within
> > > R's 
> > > > documentation, but
> > > > you can find info on it in V&R's "S
> Programming",
> > > esp. p.24 and 4.3,
> > > > "Extracting or replacing coefficients".
> > > > 
> > > > No doubt, other S/R  books explain it also.
> > > > 
> > > > Cheers,
> > > > 
> > > > Bert Gunter
> > > > Genentech Nonclinical Statistics
> > > > 47374
> > > > 
> > > > 
> > > > -----Original Message-----
> > > > From: r-help-bounces at r-project.org 
> > > > [mailto:r-help-bounces at r-project.org] On
> > > > Behalf Of John Kane
> > > > Sent: Thursday, March 13, 2008 11:53 AM
> > > > To: Henrique Dallazuanna
> > > > Cc: R R-help
> > > > Subject: Re: [R] Splitting a set of vectors in
> a
> > > list (Solved )
> > > > 
> > > > My thanks to Henrique Dallazuanna and Phil
> > > Spector. 
> > > > Both solutions worked well. 
> > > > Phil suggested that an alterative to my
> function
> > > would
> > > > be 
> > > > vect1 = sapply(mylist,'[[',1)
> > > > and I see that Henrique used `[` in his
> solution.
> > > > 
> > > > Can you point me to some documentation that
> > > discusses
> > > > these usages. I have seen them before but I
> have
> > > never
> > > > actually figured out how to use them.? 
> > > > 
> > > > Thanks.
> > > > 
> > > > Problem and solutions
> > > >
> > >
> >
>
========================================================
> > > > mylist <- list(aa=c("cat","peach" ),
> bb=c("dog",
> > > > "apple", "iron"), 
> > > >          cc = c("rabbit", "orange", "zinc",
> > > "silk"))
> > > > myfun <- function(dff) dff[1]       
> > > > vect1  <- unlist(lapply(mylist, myfun))
> > > > 
> > > > # Desired output
> > > > t(cbind( c("cat" ,  "peach" , NA, NA), bbb  <-
> > > c("dog"
> > > > ,  "apple" ,"iron", NA),
> > > > ccb <- c("rabbit" ,"orange" ,"zinc" ,  "silk"
> ))) 
> > > > 
> > > > # Phil Spector's approach
> > > > mlen = max(sapply(mylist,length))
> > > > eqlens = lapply(mylist,function(x)if(length(x)
> <
> > > mlen)
> > > >                            
> > > > c(x,rep('',mlen-length(x))) else x)
> > > > do.call(rbind,eqlens)
> > > > 
> > > > # 	"Henrique Dallazuanna" <wwwhsd at gmail.com>
> > > > #    I added the t()
> > > > t(as.data.frame(lapply(mylist, `[`,
> > > > 1:max(unlist(lapply(mylist,
> > > >  length))))))



More information about the R-help mailing list