Skip to content
Back to formatted view

Raw Message

Message-ID: <AANLkTi=8-4C3SiY+ZzHX0bMGddvnHOKyfQHnHMqQjO6n@mail.gmail.com>
Date: 2010-12-03T09:48:48Z
From: Michael Bedward
Subject: using ``<-'' in function argument
In-Reply-To: <4CF8B5E2.2000003@uni-hamburg.de>

It's only obvious when someone points it out :)

fubar is not created because, in the test x > 3 returned FALSE, which
means the cat function doesn't get used, which means the y arg (fubar
<- 6) is never required and therefore not evaluated.

Evil isn't it ?

Michael

On 3 December 2010 20:18, Ivan Calandra <ivan.calandra at uni-hamburg.de> wrote:
> See below
>
> Le 12/3/2010 06:54, Berwin A Turlach a ?crit :
>>
>> On Thu, 2 Dec 2010 23:34:02 -0500
>> David Winsemius<dwinsemius at comcast.net> ?wrote:
>>
>>> [...] 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.
>>
>> Sounds like a fair summary of what Erik said, but it is subtly wrong.
>> R has lazy evaluation of its arguments. ?There is nothing that forces
>> the assignment to be evaluated and to pass the result into the
>> function. ?On the contrary, the assignment takes place when the
>> function evaluates the argument. ?For example:
>>
>> R> ?rm(list=ls(all=TRUE))
>> R> ?ls()
>> character(0)
>> R> ?foo<- function(x, y){
>> + if (x> ?3) cat(y, "\n")
>> + x}
>> R> ?foo(4, bar<- 5)
>> 5
>> [1] 4
>> R> ?ls()
>> [1] "bar" "foo"
>> R> ?bar
>> [1] 5
>> R> ?foo(2, fubar<- 6)
>> [1] 2
>> R> ?fubar
>> Error: object 'fubar' not found
>> R> ?ls()
>> [1] "bar" "foo"
>
> Could you explain what's happening here?! In the first case "bar" is
> created, but in the second "fubar" is not... Why is that? Am I missing
> something obvious?
>>>
>>> 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).
>>
>> On the contrary, the opposite is also very likely. ?One of my favourite
>> idioms is:
>>
>> ? ? ? ?plot(fm<- lm(y~x, data=some.data))
>>
>> to (1) fit a model, (2) assign the fitted model to an object and (3)
>> look immediately at diagnostic plots.
>>
>> Students came to me and said that the code in the lab sheet didn't
>> work and they were getting strange error messages "about objects not
>> being found". ?They reassured me that they had typed in exactly what
>> was on the lab sheet. ?Of course, once I got to their computer and
>> looked at their screen, it was clear that they had typed:
>>
>> ? ? ? ?plot(fm = lm(y~x, data=some.data))
>
> It's not much more complicated to type it in two lines, but it's much
> clearer and safer!
>>
>> Cheers,
>>
>> ? ? ? ?Berwin
>>
>> ========================== Full address ============================
>> Berwin A Turlach ? ? ? ? ? ? ? ? ? ? ?Tel.: +61 (8) 6488 3338 (secr)
>> School of Maths and Stats (M019) ? ? ? ? ? ?+61 (8) 6488 3383 (self)
>> The University of Western Australia ? FAX : +61 (8) 6488 1028
>> 35 Stirling Highway
>> Crawley WA 6009 ? ? ? ? ? ? ? ?e-mail: berwin at maths.uwa.edu.au
>> Australia ? ? ? ? ? ? ? ? ? ? ? ?http://www.maths.uwa.edu.au/~berwin
>>
>> ______________________________________________
>> 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.
>>
>
> --
> Ivan CALANDRA
> PhD Student
> University of Hamburg
> Biozentrum Grindel und Zoologisches Museum
> Abt. S?ugetiere
> Martin-Luther-King-Platz 3
> D-20146 Hamburg, GERMANY
> +49(0)40 42838 6231
> ivan.calandra at uni-hamburg.de
>
> **********
> http://www.for771.uni-bonn.de
> http://webapp5.rrz.uni-hamburg.de/mammals/eng/1525_8_1.php
>
> ______________________________________________
> 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.
>