[Rd] Changed behaviour when passing a function?

Gabriel Becker
Thu, 22 Oct 2015 21:44:24 -0000

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