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

如何在RC类中使用match.call()?调用参数显示异常求助

问题原因及解决办法

异常原因

这是RC类的初始化机制导致的:当你调用linreg(...)创建实例时,底层实际是通过new("linreg", ...)触发初始化,而initialize方法是在new函数内部被调用的。此时match.call捕获的是**initialize被调用时的上下文**,也就是new内部的.Object$initialize(formula = ..1, data = ..2),而非你直接输入的linreg(...)调用语句。

修复方案

不要在initialize方法中捕获调用,而是在自定义的构造函数(即linreg函数)中先捕获用户的原始调用,再将其赋值给RC实例的call属性:

# 定义RC类
linreg <- setRefClass("linreg",
  fields = list(
    call = "language",
    formula = "formula",
    data = "data.frame"
  ),
  methods = list(
    initialize = function(formula, data) {
      .self$formula <- formula
      .self$data <- data
      # 不在initialize中处理call
    }
  )
)

# 重写构造函数以捕获原始调用
linreg <- function(formula, data) {
  captured_call <- match.call()
  obj <- new("linreg", formula = formula, data = data)
  obj$call <- captured_call
  obj
}

# 测试
linreg_mod <- linreg(formula=Petal.Length ~ Species, data=iris)
linreg_mod$call
# 输出:linreg(formula = Petal.Length ~ Species, data = iris)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 19:31:05