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

R中do.call调用anova附加参数运行报错的实现方法

问题核心原因

do.call的传参逻辑要求,第二个参数传入的列表中,每个列表元素都是目标函数可以直接接收的独立入参。
你之前的写法do.call("anova", list(Poly.fits, test = "F")) 生成的传参列表有两个元素:第一个元素是整个存了5个模型的Poly.fits大列表,第二个元素是test="F"。这相当于让anova直接接收一个装着模型的列表作为第一入参,而anova的泛型方法并不支持列表类型的输入,因此抛出了“找不到对应方法”的错误。
之前你跑通的do.call("anova", Poly.fits) 没有报错,就是因为Poly.fits本身就是由5个模型组成的列表,do.call会自动把每个列表元素拆成独立的函数入参,相当于手动逐个传入5个模型。这个写法唯一的不足就是没机会传入test = "F"这类额外参数。

正确实现代码

只需要把存储模型的Poly.fits列表和额外参数列表合并,让最终传给do.call的参数列表拆解开之后等价于你手动写的完整anova调用即可,常用的写法有两种:

  • 利用基础R的c()做列表拼接(最常用):
do.call(anova, c(Poly.fits, list(test = "F")))
  • 利用append()做列表追加:
do.call("anova", append(Poly.fits, list(test = "F")))
运行逻辑说明

两种写法的最终传参结构完全一致:

  1. 合并后的参数列表长度为6,前5个元素是你存放在Poly.fits里的5个lm模型对象,会被do.call自动拆成anova的前5个位置参数;
  2. 最后一个元素是命名参数test = "F",会被作为anova的额外关键字参数传入;
  3. 最终的调用效果和你手动写的anova(Poly.fits[[1]], Poly.fits[[2]], Poly.fits[[3]], Poly.fits[[4]], Poly.fits[[5]], test = "F") 完全等价,运行后会自动输出嵌套模型对比的F检验结果。

内容的提问来源于stack exchange,提问作者Victor Feagins

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 16:36:04