Splitting a set of vectors in a list (Solved )
--- "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))))))