If statement generates two outputs
Berwin A Turlach wrote:
G'day Carl, On Mon, 23 Mar 2009 20:11:19 -0400 Carl Witthoft <carl at witthoft.com> wrote:
>From: Wacek Kusnierczyk <Waclaw.Marcin.Kusnierczyk_at_idi.ntnu.no> >Date: Sun, 22 Mar 2009 22:58:49 +0100
>just for fun, you could do this with multiassignment, e.g., using >the (highly experimental and premature!) rvalues:
> source('http://miscell.googlecode.com/svn/rvalues/rvalues.r')
>if (TRUE)
> c(df1, df2) := list(4:8, 9:13)
> dput(df1) > # 4:8 > dput(df2) > # 9:13
-------
Now THAT's what I call an overloaded operator! ^_^
But seriously: can someone explain to me what's going on in the
rvalues.r code? I tried a simple experiment, replacing ":=" with a
"colec" in the code, and of course the line
c(df1, df2) colec list(4:8, 9:13)
just gives me a "syntax error" response. Clearly I need a pointer
to some documentation about how the colon and equals sign get
"special treatment somewhere inside R.
Not sure why := gets a special treatment, perhaps because it is not a valid name and, hence, the parser deduces that it is an operator?
possibly. you'd have to look into the parser code, as it has, as duncan explained, no documentation. ?Syntax doesn't mention it either, as doesn't the r language definition, as far as i can see.
IIRC, the traditional way to define your own operator is to bound the name by percentage signs, i.e. replacing ":=" by "%colec%" and then issuing the command c(df1, df2) %colec% list(4:8, 9:13) will work.
... and which was precisely why i wanted the simple ':=' -- because all those traditional %*% are so ugly (syntactically). vQ