[R-SIG-Mac] A shorthand for '<-'

Duncan Murdoch murdoch at stats.uwo.ca
Wed Nov 21 21:48:12 CET 2007


On 11/21/2007 1:19 PM, Simon Urbanek wrote:
> On Nov 21, 2007, at 11:45 AM, John Chambers wrote:
> 
>> Simon Urbanek wrote: James,
>>
>> On Nov 21, 2007, at 8:22 AM, James Milks wrote:
>>
>>> The '=' sign can be used in place of '<-'.  That's the only  
>>> shorthand I know for R.
>>>
>>
>> That's not a shorthand. `=` and `<-` are semantically different in R.
>> Well, not really :-)
>>
>> It's true that the "=" operator won't be displayed as "<-", which I  
>> agree was the original point.  But both assignment operators map  
>> into the same internal C code, if you di g into the implementation.
>>
> 
> I think we may be talking about different things here.
> 
>  > a=list(a=1,b=2)
>  > ls()
> [1] "a"
> 
>  > a<-list(a<-1,b<-2)
>  > ls()
> [1] "a" "b"
> 
> So `<-` and `=` are *not* semantically equivalent (where `<-` and `=`  
> represent symbols in the parse tree).
> 
> And I suppose the misunderstanding comes from the interpretation of  
> `=` and `<-`: I meant them as symbols (which is what I would expect  
> since we're talking about writing R code) and you interpreted them as  
> operators (which cold be expected given that I used backticks which  
> was not wise ;)). You are right that `=` and `<-` are equivalent as  
> operators:
> 
>  > `=`(a,list(`=`(a,1),`=`(b,2)))
>  > ls()
> [1] "a" "b"
> 
> I hope this makes things even more clear ;).

Of course, even using them as operators the parser doesn't think they 
are identical:

 > if (a <- 1) cat("yes\n")
yes
 > if (a = 1) cat("yes\n")
Error: unexpected '=' in "if (a ="
 > if (`=`(a,1)) cat("yes\n")
yes

Duncan Murdoch



More information about the R-SIG-Mac mailing list