R允许将函数作为参数,但如果有一个与函数同名的对象,如下所示:
> print<-c(1,2,3) #这里print是一个列表和print函数重名
> test<-function(o,fun){
+ fun(o)
+ }
> test(print,fun=print)
Error in test(print, fun = print) : 没有"fun"这个函数
出错,没有找到fun这个函数,显然这里没有将print函数赋值给fun,而将print向量赋值给了fun.为避免发生此错误。在函数体内使用match.fun().如下所示:
> test<-function(o,fun){
+ fun<-match.fun(fun)
+ fun(o)
+ }
> test(print,fun=print)
[1] 1 2 3
print函数打印了print向量.match,fun()函数查找函数名与"print"匹配的函数.