On 22/10/2015 5:44 PM, Gabriel Becker wrote:
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.

It comes down to the order of operations: we need to bind something to FUN, and we need to look up a function named FUN. Since the binding comes first, it fails. If it happened in the other order: look for a function named FUN, find an unresolved binding to "round", look in the caller frame for a function named round, we wouldn't get the error. But that's not how we do it.

Duncan Murdoch

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.dun...@gmail.com <mailto:murdoch.dun...@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@r-project.org <mailto:R-devel@r-project.org> mailing list
    https://stat.ethz.ch/mailman/listinfo/r-devel




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

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to