[R] Strange behaviour of R?
Duncan Murdoch
murdoch@dunc@n @end|ng |rom gm@||@com
Fri Jan 17 11:40:07 CET 2020
On 17/01/2020 2:33 a.m., Sigbert Klinke wrote:
> Hi,
>
> I wrote a function like
>
> test <- function(FUN, args) {
> print(FUN)
> FUN(args)
> }
>
> When I call it lieke this
>
> test(mean, 1:10)
> test(NULL, 1:10)
>
> then the second call still uses mean, although I set FUN to NULL. Is
> that ok?
You probably have a function defined in your global environment that is
named FUN and acts like mean.
The general rule in R is that it only looks for objects of mode function
when trying to find something used as a function. So in your second
case, when trying to evaluate FUN(args), R will look for a function
named FUN in the local evaluation frame, and won't find one: FUN is
NULL there. Then it will go to the environment of test, which is likely
the global environment, and look there. That's where it probably found
the function.
For example, try this:
FUN <- function(...) print('FUN was called')
test <- function(FUN, args) {
print(FUN)
FUN(args)
}
test(NULL, 1:10)
Duncan Murdoch
>
> Actually, I used something like
>
> test(mean, list(x=1:10, na.rm=TRUE))
>
> which actually crashed R, but I can not reproduce it. Of course, when I
> replaced FUN(args) with do.call(FUN, args) then everything works fine.
>
> Sigbert
>
More information about the R-help
mailing list