5

data.frame から継承するクラスのメソッドを作成しようとしています。私はもともと data.frame から 'show' メソッドを継承することだけを望んでいましたが、自分で書いても問題ありません。クラスと「show」メソッドを次のように定義しました。

setClass("SCvec", representation(auth = "character",
    dev = "character",
    sensor = "character",
    channel = "character",
    starttime = "character",
    endtime = "character"),
    contains="data.frame")
setMethod("show", signature(x="SCvec"), function(x) print(x))

R コンソールに入力showすると、次のように出力されます。

パッケージ "methods" から定義された "show" の standardGeneric

function (object) 
standardGeneric("show")
<bytecode: 0x0396bee8>
<environment: 0x0393ab60>
Methods may be defined for arguments: object
Use  showMethods("show")  for currently available ones.
(This generic function excludes non-simple inheritance; see ?setIs)

したがって、自分で StandardGeneric() を使用してジェネリックに変換する必要はないようです。しかし、setMethod("show", signature(x="SCvec"), function(x) print(x))行を実行するとエラーが発生します

Error in match.call(definition, call, expand.dots) : 
  unused argument(s) (x = c("SCvec", ""))

他のメソッドを定義するのと同じように、このメソッドを定義しました。このメソッド定義が機能しないのはなぜですか? 「show」は他のジェネリック関数とは異なりますか?

4

1 に答える 1

9

関数showは引数を取るobjectため、その仮引数に関して署名と関数定義を定義する必要があります。

setMethod("show", signature(object="SCvec"), function(object) print(object))

show入力することで、定義されている他のメソッドを表示することもできます

showMethods(show)

そして、これは、他のすべてのメソッドもクラスの観点から定義されていることを示していますobject

于 2012-07-11T18:56:58.360 に答える