为简单起见,我将使用以下示例代码:)
我已经定义了一个 S4 类test
,然后像往常一样,我采用为类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:
我发现用我们如何实现 S3 泛型方法的形式替换split
S4 类的方法定义,如下所示,可以消除该消息:test
split.test <- function(x, f) {
split(x@m, f)
}
但是,我认为混合 S3 和 S4不是一个好主意 :)