如何在R中对以函数为输入的if else条件进行测试?
解决R中函数对象比较的问题
在R中直接使用!=或==比较函数对象会报错,因为这类运算符仅支持原子类型(如数值、字符)或列表,而函数属于closure类型,无法通过这种方式比较。要判断输入的函数对象是否为var,可以使用identical()函数——它能准确判断两个R对象是否完全一致。
修正后的代码示例
myFun = function(..., FUN) { # 可选:确保FUN是合法函数对象,增强鲁棒性 FUN <- match.fun(FUN) if (identical(FUN, var)) { # 针对var函数的特殊处理逻辑 var_result <- var(...) # 示例:返回方差的两倍 return(var_result * 2) } else { # 其他函数的通用处理逻辑 return(FUN(...)) } }
测试验证
- 调用
myFun(1:10, FUN = mean),会返回1到10的均值5.5 - 调用
myFun(1:10, FUN = var),会返回方差的两倍(原方差约为9.1667,返回值为18.3333)
补充说明
identical(FUN, var)会严格匹配R内置的var函数,如果传入的是自定义的同名函数,该判断会返回FALSE,符合你要求的“仅匹配内置var函数对象”的需求。- 加入
match.fun(FUN)可以兼容用户不小心传入函数名字符串的情况(比如"mean"),如果严格要求必须传入函数对象,可去掉这一步。
内容的提问来源于stack exchange,提问作者therickster
相关产品推荐
相关产品推荐

