默认情况下不打印 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)
我写了 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)