match.fun                package:base                R Documentation

_F_u_n_c_t_i_o_n _V_e_r_i_f_i_c_a_t_i_o_n _f_o_r ``_F_u_n_c_t_i_o_n _V_a_r_i_a_b_l_e_s''

_D_e_s_c_r_i_p_t_i_o_n:

     When called inside functions that take a function as argument,
     extract the desired function object while avoiding undesired
     matching to objects of other types.

_U_s_a_g_e:

     match.fun(FUN, descend = TRUE)

_A_r_g_u_m_e_n_t_s:

     FUN: item to match as function.

 descend: logical; control whether to search past non-function objects.

_D_e_t_a_i_l_s:

     `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 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 now used in base functions such as `apply', `lapply',
     `outer', and `sweep'.

_V_a_l_u_e:

     A function matching `FUN' or an error is generated.

_B_u_g_s:

     The `descend' argument is a bit of misnomer and probably not
     actually needed by anything.  It may go away in the future.

     It is impossible to fully foolproof this.  If one `attach'es a
     list or data frame containing a character object with the same
     name of a system function, it will be used.

_A_u_t_h_o_r(_s):

     Peter Dalgaard and Robert Gentleman, based on an earlier version
     by Jonathan Rougier.

_S_e_e _A_l_s_o:

     `match.arg', `get'

_E_x_a_m_p_l_e_s:

     # Same as get("*"):
     match.fun("*")
     # Overwrite outer with a vector
     outer <- 1:5

     match.fun(outer, descend = FALSE) #-> Error:  not a function

     match.fun(outer) # finds it anyway
     is.function(match.fun("outer")) # as well

