我编写的类通过在给定矩阵上完成的操作历史添加一个插槽来扩展矩阵。
setClass("newMatrix", representation(history = "character"), contains = "matrix")
我希望这个类的实例充当矩阵,所以我只想默认打印出.Data插槽,并且函数调用历史记录。
m <- new("newMatrix", 1:4, 2, 2, history = "ipsum")
> m
An object of class "newMatrix"
[,1] [,2]
[1,] 1 3
[2,] 2 4
Slot "history":
[1] "ipsum"
是否有办法默认只进行R打印。此类的数据插槽,如下所示:
> m
[,1] [,2]
[1,] 1 3
[2,] 2 4
答案 0 :(得分:1)
鉴于您处于S4设置,最好的方法是定义一个show方法:
setClass("newMatrix", representation(history = "character"), contains = "matrix")
m <- new("newMatrix", 1:4, 2, 2, history = "ipsum")
setMethod("show",
"newMatrix",
function(object){
show(object@.Data)
})
如果您需要单独的print
方法,还需要为此提供S4方法。避免S3 / S4冲突的经典结构如下:
print.newMatrix <- function(x, ...){
print(x@.Data)
}
setMethod("print",
"newMatrix",
print.newMatrix)
构建单独的print
方法并不是必需的,因为如果print()
无法找到show()
方法,print
将使用newMatrix
方法班?Methods_for_S3
。
您只能创建S3方法,但这会让您遇到麻烦,如帮助页public void InsertSuggestion(string suggestion)
{
this.Text = this.Text + suggestion;
}
(见:https://www.rdocumentation.org/packages/methods/versions/3.4.3/topics/Methods_for_S3)
答案 1 :(得分:0)
是的,您可以为您的班级添加print
方法:
print.newMatrix <- function(x, ...) {
print.default(x@.Data, ...)
}
> print(m)
[,1] [,2]
[1,] 1 3
[2,] 2 4