From gmbecker at ucdavis.edu  Thu Oct 22 23:44:24 2015
From: gmbecker at ucdavis.edu (Gabriel Becker)
Date: Thu, 22 Oct 2015 14:44:24 -0700
Subject: [Rd] Changed behaviour when passing a function?
In-Reply-To: <56295440.2080002@gmail.com>
References: <CAO1zAVb9azyYRR-fu5EKwzv0h9Rhu_tuL6oVtbyA1rW_5hAnFw@mail.gmail.com>
	<56295440.2080002@gmail.com>
Message-ID: <CADwqtCOhnSCxfdydoNAr6RO55sWumV-f-eQa7TCcTPunMUCosw@mail.gmail.com>

Of course (and unsurprisingly) Duncan is correct.  I see that behavior in R
3.1.0, as well as the modern ones Duncan mentioned.

What I said is true, as far as it goes, but the symbol being resolved is
FUN, so when looking for a function it doesn't find the function version of
round.

Did you perhaps have a function named FUN in your global environment? If so
you are being bitten by what I mentioned before.

> FUN = function(...) 1
> myfun <- function(x, FUN, ...){
+      FUN(x, ...)
+ }
> round <- 2
> myfun(0.85, FUN = round, digits=1)
[1] 1

~G

On Thu, Oct 22, 2015 at 2:25 PM, Duncan Murdoch <murdoch.duncan at gmail.com>
wrote:

> On 22/10/2015 1:59 PM, Joris Meys wrote:
>
>> Hi all,
>>
>> When teaching this year's class, I was quite amazed that one of my
>> examples
>> didn't work any longer. I wanted to illustrate the importance of
>> match.fun() with following code:
>>
>> myfun <- function(x, FUN, ...){
>>      FUN(x, ...)
>> }
>> round <- 2
>> myfun(0.85, FUN = round, digits=1)
>>
>> I expected to see an error, but this code doesn't generate one. It seems
>> as
>> if in the current R version match.fun() is added automatically.
>>
>> I've scrolled through the complete R News section specifying all the
>> changes and bug fixes, starting from 3.0.0.  I couldn't find anything on
>> that change in behaviour though. Where can I find more information on what
>> changed exactly?
>>
>>
> When you say "current R version", what do you mean?  I see an error:
>
> > myfun <- function(x, FUN, ...){
> +     FUN(x, ...)
> + }
> > round <- 2
> > myfun(0.85, FUN = round, digits=1)
> Error in myfun(0.85, FUN = round, digits = 1) (from #2) :
>   could not find function "FUN"
>
> I see this in 3.2.2, R-patched and R-devel.
>
> Duncan Murdoch
>
>
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>



-- 
Gabriel Becker, PhD
Associate Scientist (Bioinformatics)
Genentech Research

	[[alternative HTML version deleted]]



[Rd] Changed behaviour when passing a function?
Gabriel Becker