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

R语言中含NaN的两个dataframe计算平均绝对误差(MAE)报错如何解决

问题原因分析
  • 自定义函数报错:你在定义函数时使用了df1$AU、df2$UF1这类带$符号的变量作为形参,不符合R的参数命名规则,导致R无法正常解析函数的参数列表,na.rm参数没有被正确识别,因此运行时会提示找不到na.rm对象。
  • Metrics包mae函数报错:Metrics包内置的mae函数本身没有设计na.rm参数,你传入na.rm = TRUE属于多余参数,因此会报unused argument错误。
正确解决方案

方案1:使用修正后的自定义函数(推荐)

MAE的数学定义就是观测值和预测值绝对差的均值,你直接运行mean(abs(df1$AU-df2$UF1), na.rm=TRUE)得到的结果就是正确的MAE值,na.rm=TRUE已经自动跳过了所有包含NaN的配对观测,符合你的数据处理需求。
你可以把自定义函数修正为通用格式,方便批量计算三组MAE:

# 修正后的自定义MAE函数
mae1 <- function(actual, predicted, na.rm = TRUE) {
  mean(abs(actual - predicted), na.rm = na.rm)
}

# 分别计算三组MAE
mae1(df1$AU, df2$UF1)
mae1(df1$AU, df2$UF2)
mae1(df1$AU, df2$UF3)

调用函数时不需要额外传na.rm=TRUE,因为已经设为默认值。

方案2:使用Metrics包的正确调用方式

如果你要使用Metrics包的内置函数,需要先手动筛选出观测值和预测值都非NaN的有效观测,再传入函数计算:

library(Metrics)
# 筛选有效观测的索引
valid_idx <- complete.cases(df1$AU, df2$UF1)
# 计算MAE
mae(df1$AU[valid_idx], df2$UF1[valid_idx])

内容的提问来源于stack exchange,提问作者Cláudio Siva

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 19:36:03