[R] using ``<-'' in function argument

David Winsemius dwinsemius at comcast.net
Fri Dec 3 05:34:02 CET 2010


On Dec 2, 2010, at 10:47 PM, Erik Iverson wrote:

> On 12/02/2010 09:35 PM, Jinsong Zhao wrote:
>> Hi there,
>>
>> In function, it's usually using ``='' to assign default value for  
>> function
>> argument. For newbie, it's possible to using ``<- '' to assign  
>> value for
>> function argument. Although it's not a correct way, R don't give  
>> any warning
>> message.
>>
>> > matrix(1:20, ncol <- 4)
>> [,1] [,2] [,3] [,4] [,5]
>> [1,] 1 5 9 13 17
>> [2,] 2 6 10 14 18
>> [3,] 3 7 11 15 19
>> [4,] 4 8 12 16 20
>>
>> It seems that R ignore the ``ncol <-'' and assign the value 4 to  
>> ``nrow''.
>>
>> Would anyone here give a more detailed explanation about this?  
>> Thanks in advance!
>
> Yes, R gives the global variable ncol a value of 4. Try typing
>
> > ncol
> before and after your example.
>
> The second argument to the matrix function is now the value 4, and R  
> uses
> positional matching to give that argument (nrow) a value of 4. Thus,
> the result.
>
> Moral of the story: don't do that. :)

Certain functions (so-called "primitive" functions)  are entirely  
driven by positional matching, although matrix is not one of those  
functions. Erik is telling you that your use of ncol<-4 got evaluated  
to 4 and that the name of the resulting object was ignored, howevert  
the value of the operation was passed on to matrix which used  
positional matching since "=" was not used. Usually the problem facing  
newbies is that they want to save keystrokes and so use "=" for  
assignment (also a potential pitfall although not as likely to mess  
you up as the choice to use the two-keystroke path for argument  
assignment).

  "<-" is really a function and returns a value in addition to having  
a side-effect of assigning a value to an object.

 > y <- eval(x<-4)
 > y
[1] 4



> --Erik
>
>>
>> Best regards,
>> Jinsong
>>
>> ______________________________________________
>> R-help at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
>> and provide commented, minimal, self-contained, reproducible code.
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.

David Winsemius, MD
West Hartford, CT



More information about the R-help mailing list