S3 オブジェクトのみを受け取るメソッドに渡すことができるように、S4 オブジェクトを作成したいと思います。(これに関連しているようですが、ドキュメントsetOldClass()
からはわかりませんか?)
たとえば、最小限の例として、S3 クラスと関数があるとします。
myS3 <- list(a = 1, b = 2)
class(myS3) <- "myS3class"
myS3function.myS3class <- function(x) x$a + x$b
そして私はS4オブジェクトを持っています
setClass("myS4class", representation(a = "numeric", b = "numeric"))
obj <- new("myS4class", a = 1, b = 2)
そのような私にできることはありますか
myS3function.myS3class(obj)
私に同じことを与える
myS3function.myS3class(myS3)
S4クラスのみを変更することによって?
編集このアプローチの私の論理的根拠は、S3 クラスのすべての既存のメソッド (通常は他のパッケージなどから取得される可能性があります) を、それらを書き直すことなく利用することです。1 つのアプローチはsetAs()
、S4 オブジェクトを S3 オブジェクトに変換する強制メソッド ( ) を単純に記述することですが、その場合、ユーザーは常にこの手順を手動で実行する必要があります。setAs()
(動作しますが、S4 クラス間でマッピングするのではなく、S4 クラスを S3 クラスに 使用するのが悪い習慣であるかどうかも少しわかりません)。
のドキュメントを読んだ方法から、setOldClass
これは S3 オブジェクトを S4 オブジェクトのように動作させることができるように思えますか? あれは正しいですか?もしそうなら、私の質問は逆を行うことができるかどうかです(おそらくprototype
S4クラスで設定することによって?)。
これが不可能な場合、これが悪い考えである理由の説明はどうですか?