[R] If statement generates two outputs

Wacek Kusnierczyk 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).

vQ




More information about the R-help mailing list