奇妙なエラー:メソッド定義で省略されている正式な引数は署名にはできません

StackOverflow https://stackoverflow.com//questions/22025572

  •  21-12-2019
  •  | 
  •  

質問

1つのRファイルで一般的なメソッドを定義し、それらを別のRファイルに実装しようとしています。 しかし、私は理解していないエラーが発生します。

質問:

  1. エラーの発生源は何ですか?
  2. エラーを解決する方法?
  3. 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に変更した方法に注意してください。基本的に、あなたは署名が署名と矛盾した関数を定義しようとしていました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top