は「非公開に」メソッド私はいくつかのカスタムクラスを持って、例えば:R - カスタムクラスのリスト
setClass("foo", slots = c(mat = "matrix"))
私はfoo
オブジェクトのリストが「非公開」されている方法を扱うようにしたいです。
mat <- matrix(rnorm(16), 4)
foo <- new("foo", mat = mat)
unlist(list(foo))
Iは、おそらく(私は間違って、おそらく使用されたと思ったが、これは)c
ための方法を作成し、unlist
する問題を解決するだろうと思いました。
S3バージョン
#' @export
unlist <- function(x, ...) UseMethod("unlist", x)
#' @export
unlist.default <- base::unlist
#' @method unlist foo
#' @export
unlist.foo <- function(x, ...){
print("called foo unlist")
}
S4バージョン
#' @export
setMethod("unlist",
signature = "foo",
function(x, recursive = TRUE, use.names = TRUE){
print("call foo unlist")
})
c
機能
#' @export
setMethod("c",
signature = "foo",
function(x, ..., recursive = FALSE){
print("called foo c")
})
しかし、私は直接c
を使用するとき、私は唯一の確認メッセージを参照してください。
c(foo)
[1] "called foo c"
unlist
ちょうどなし印刷メッセージ
unlist(list(foo))
[[1]]
An object of class "foo"
Slot "mat":
[,1] [,2] [,3] [,4]
[1,] 0.6711541 -0.2783441 -0.4707375 -0.23060105
[2,] 0.7408401 0.4076826 2.2757187 -0.48547413
[3,] 1.8640581 0.3610619 -0.4632473 -0.06498348
[4,] -0.5595930 0.6679157 -0.8142456 0.27499963
私はunlist(foo)
を呼び出す場合、私は、印刷メッセージが表示されますが、私はfoo
オブジェクトのリストにそれを適用する必要があります。どのように私はリスト内のカスタムクラスに対処することができますか?
最終的に私は次のようにTRUE
を返すようにしたい:
all.equal(unlist(list(foo)), unlist(list(mat)))
'unlist'はS3メソッドのようには見えません。あなたの関数を使いたいのであれば、 'unlist.foo'を直接呼び出す必要があります。 – Chrisss
@Chrisss私は' roxygen2'を使ってS3としてエクスポートしましたが、S3として明示的に 'unlist'をインスタンス化しました。それでも同じ問題が発生します。 – cdeterman
'unlist。foo'はS3のメソッドとなります。これは 'foo < - structure(matrix(rnorm(16)、4)、class =" foo ")'などのオブジェクトに適用されますが、間違いではない。 – baptiste