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
______________________________________________
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.