4

作成したオブジェクトの「c」メソッドを定義しようとしています。

何かのようなもの

setMethod("c", 
          signature(...), 
          definition=function (...) {
            myObject = list(...)[[1]]
            myObject@mySlot=lapply(list(...), FUN = function(x) slot(x, "mySlot"))
            return(myObject)
         }
)

問題は、ディスパッチが適切に行われるように...のクラスを定義できないことです。何か案が?

4

1 に答える 1

5

@hadleyのコメントを詳しく説明すると、署名はクラス用であり、定義は次のようになりますgetGeneric。したがって、

> getGeneric("c")
standardGeneric for "c" defined from package "base"

function (x, ..., recursive = FALSE)
standardGeneric("c", .Primitive("c"))
<environment: 0x4956ab8>
Methods may be defined for arguments: x, recursive
Use  showMethods("c")  for currently available ones.

それで

setClass("A", representation(x="numeric"))
setMethod("c", "A", function(x, ..., recursive=FALSE) {
  "here I am"
})

> c(new("A"), new("A"))
[1] "here I am"
于 2013-02-04T04:06:56.660 に答える