默认情况下不打印 class 实例的所有插槽

Don't print all slots of class instance by default

我写了 class,它通过为在给定矩阵上完成的操作历史添加一个槽来扩展矩阵。

setClass("newMatrix", representation(history = "character"),  contains = "matrix")

我希望这个 class 的实例充当矩阵,所以我只希望默认打印出 .Data 插槽,并通过函数调用 history。

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默认只打印这个class的数据槽,像这样:

> m
     [,1] [,2]
[1,]    1    3
[2,]    2    4

是的,您可以为 class 添加一个 print 方法:

print.newMatrix <- function(x, ...) {
  print.default(x@.Data, ...)
}

> print(m)
     [,1] [,2]
[1,]    1    3
[2,]    2    4

鉴于您处于 S4 设置中,最好的方法是定义一个显示方法:

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 冲突的 classic 构造如下:

print.newMatrix <- function(x, ...){
 print(x@.Data)

}

setMethod("print",
          "newMatrix",
          print.newMatrix)

构造一个单独的print方法并不是真正必要的,因为print()如果找不到print方法,就会在这里使用show()方法class newMatrix

您只能创建 S3 方法,但这会给您带来麻烦,如帮助页面所述 ?Methods_for_S3

(参见:https://www.rdocumentation.org/packages/methods/versions/3.4.3/topics/Methods_for_S3