默认情况下,不要打印类实例的所有插槽

时间:2018-02-16 12:05:31

标签: r class inheritance matrix s4

我编写的类通过在给定矩阵上完成的操作历史添加一个插槽来扩展矩阵。

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

2 个答案:

答案 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