0

問題を再現するコードのスニペットを作成するのに時間がかかりました。ここにあります。コマンドを実行するnew("FirstSet", id = "Input", multiplier = 2) と、正しい答えが得られることに注意してください。ただし、両方を含むクラスを作成しようとすると、次のようになりますError in .local(.Object, ...) : argument "id" is missing, with no default。これは文字通り、問題を説明/表示するために私ができる最善の方法です。

私は一体何を間違っているのでしょうか?

setClass("Details",
     representation(
      ID = "character",
      Anumber = "numeric"))

 Input <- new("Details",
         ID = "Input",
         Anumber = 2)

 setClass("FirstSet",
     representation(
     Anothernumber = "numeric"))

 setGeneric(
 name = "FirstSet",
 def = function(object){standardGeneric("FirstSet")}
 )

 setMethod("initialize",
      signature(.Object = "FirstSet"),
      function (.Object, id, multiplier) 
      { x = id@Anumber
        y = x * multiplier

        .Object@Anothernumber = y
        return(.Object)
      }
 )

setClass("Super", contains = c("Details", "FirstSet"))  

修正されたコードで新しいエラーが発生するようになりました。投稿の指示に従い、問題を解決しました。「スーパー」のジェネリックとメソッドも作成しました。以下のコードを参照してください。今、私は新しいエラーを受け取ります。.local(.Object, ...) のエラー: スロットのない基本クラス ("character") のオブジェクトからスロット "Anumber" を取得しようとしています。男、これは疲れます、私はそれを持っていると思いました。

詳細の目標は、シリアル化される多くのファイルが存在し、ファイル内のデータの特性に応じてメソッドが呼び出されることです。これはRでも可能ですか、それともRではできないことをしようとしていますか?

新しいコード

setClass("Details",
representation(
    ID = "character",
    Anumber = "numeric"))

setGeneric("Details",
def = function(object){standardGeneric("Details")})

setMethod("initialize",
signature(.Object = "Details"),
function(.Object, ID = character(), Anumber = numeric()){
    .Object@ID = ID
    .Object@Anumber = 2
    return(.Object)
 })

setClass("FirstSet",
representation(
    Anothernumber = "numeric"))

setGeneric(
name = "FirstSet",
def = function(object){standardGeneric("FirstSet")}
)

 setMethod("initialize",
signature(.Object = "FirstSet"),
function (.Object, id = character(), multiplier = numeric()) 
{ x = id@Anumber
    y = x * multiplier

    .Object@Anothernumber = y
    return(.Object)
}
)

setClass("Super", contains = c("Details", "FirstSet"))

setGeneric("Super",
def = function(object){standardGeneric("Super")})

  setMethod("initialize",
  signature(.Object = "Super"),
  function(.Object, id = character(), Anumber = numeric()){
    Details <- new("Details", ID = id, Anumber = Anumber)
    FirstSet <- new("FirstSet", Anothernumber = Anothernumber)
    Super <- new("Super", Details, FirstSet)
    return(.Object)
 })
4

1 に答える 1