2

簡単にするために、次のサンプルコードを使用します:)

S4 class を定義してtestから、いつものようにclass のsetMethodジェネリック関数を書くことにしました:splittest

# define a S4 class
setClass(
  Class="test",
  representation=representation(
   m = "matrix"
  )
)

# write generic function 'split' for S4 class 'test'
setMethod(f = "split", signature = c("test"), function(x, f) {
  split(x@m, f)
})

# call generic function for test
split(new("test", m=matrix(1:9,3)), c(1,2,3))

上記のコードを実行すると、R コマンド ラインから次のようなメッセージが表示されます。

グローバル環境でパッケージ「base」から「split」の汎用関数を作成する

そして、プログラムの出力は次のようになります。

$`1`
[1] 1 4 7

$`2`
[1] 2 5 8

$`3`
[1] 3 6 9

出力は正しいようです。しかし、私の質問は、メッセージを抑制する方法です:

グローバル環境でパッケージ「base」から「split」の汎用関数を作成する

どうもありがとう :)

PS:split S4 クラス のメソッドの定義を、次のようにS3 ジェネリック メソッドを実現する方法testの形式に置き換えると、そのメッセージが削除されることがわかりました。

split.test <- function(x, f) {
  split(x@m, f)
}

ただし、 S3とS4を混在させるのは良い考えではないと思います :)

4

1 に答える 1