簡単にするために、次のサンプルコードを使用します:)
S4 class を定義してtest
から、いつものようにclass のsetMethod
ジェネリック関数を書くことにしました:split
test
# 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を混在させるのは良い考えではないと思います :)