r - 奇怪的错误 : formal arguments omitted in the method definition cannot be in the signature

标签 r s4

我试图在一个 R 文件中定义通用方法并在另一个 R 文件中实现它们。
但是我收到一个我不明白的错误。

问题:

  • 错误的根源是什么?
  • 如何修复错误?
  • BuyProbabilityGeneric.R的内容:
    setGeneric("FirstTimeBuyProbability",
            valueClass = "numeric",
            function(object, period, price) {
        standardGeneric("FirstTimeBuyProbability")
    })
    
    setGeneric("ReturningBuyProbability",
            valueClass = "numeric",
            function(object, period1, price1, period2, price2) {
        standardGeneric("ReturningBuyProbability")
    })
    
    BuyProbabilityBasic.R的内容:
    setClass("BuyProbabilityBasic", representation(
            full.price.probability = "numeric",
            elasticity = "numeric"))
    
    setMethod("FirstTimeBuyProbability",
            signature(object = "BuyProbabilityBasic", 
                    period = "numeric", price = "numeric"), 
            function(object, t, price) {
        full.price.probability * price^elasticity
    })
    
    setMethod("ReturningBuyProbability",
            signature(object = "BuyProbabilityBasic", 
                    period1 = "numeric", price1 = "numeric",
                    period2 = "numeric", price2 = "numeric"), 
            function(object, period1, price1, period2, price2) {
        max(0, FirstTimeBuyProbability(object, period2, price2) -
            FirstTimeBuyProbability(object, period1, price1))
    })
    

    R控制台输出:
    > source('BuyProbabilityGeneric.R')
    > source('BuyProbabilityBasic.R')
    Error in conformMethod(signature, mnames, fnames, f, fdef, definition) : 
      in method for ‘FirstTimeBuyProbability’ with signature 
    ‘object="BuyProbabilityBasic",period="numeric",price="numeric"’: 
    formal arguments (period = "numeric") omitted in the method definition
    cannot be in the signature
    

    最佳答案

    尝试:

    setMethod("FirstTimeBuyProbability",
              signature(object = "BuyProbabilityBasic", 
                        period = "numeric", price = "numeric"), 
              function(object, period, price) {
                full.price.probability * price^elasticity
              })
    

    注意我是如何改变的 tperiod在您的函数定义形式中。基本上,您试图定义一个函数,其中形式与签名发生冲突。

    关于r - 奇怪的错误 : formal arguments omitted in the method definition cannot be in the signature,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22025572/

    相关文章:

    r - 一列的唯一值对应另一列的唯一值

    r - 如何在 r 中的 h2o.automl 排行榜中打印所有模型的可变重要性

    r - 在 R 中快速绘制多个直方图

    r - 按因子列均值

    r - 在 R 包中定义组通用函数

    r - 如何在 R 中创建用户定义的 S4 类的数据框

    r - 加载 tidyverse 时出现问题

    r - S4方法调度慢吗?

    r - 如何使用方法在 S4 对象 r 中设置值(无需输入值)

    r - 嵌套函数的复杂对象初始化范围问题