You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 05:15:20