match.fun is not intended to be used at the top level since it
will perform matching in the parent of the caller.
If FUN is a function, it is returned. If it is a symbol (for
example, enclosed in backquotes) or a
character vector of length one, it will be looked up using get
in the environment of the parent of the caller. If it is of any other
mode, it is attempted first to get the argument to the caller as a
symbol (using substitute twice), and if that fails, an error is
declared.
If descend = TRUE, match.fun will look past non-function
objects with the given name; otherwise if FUN points to a
non-function object then an error is generated.
This is used in base functions such as apply,
lapply, outer, and sweep.