[Rd] Changed behaviour when passing a function?
Duncan Murdoch
murdoch.duncan at gmail.com
Thu Oct 22 23:56:57 CEST 2015
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.duncan at gmail.com <mailto: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 <mailto:R-devel at r-project.org> mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>
>
>
>
> --
> Gabriel Becker, PhD
> Associate Scientist (Bioinformatics)
> Genentech Research
More information about the R-devel
mailing list