[R] If statement generates two outputs
Waclaw.Marcin.Kusnierczyk at idi.ntnu.no
Tue Mar 24 08:40:14 CET 2009
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).
More information about the R-help