默认情况下,不要打印类实例的所有插槽
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了默认情况下,不要打印类实例的所有插槽相关的知识,希望对你有一定的参考价值。
我编写了通过在给定矩阵上完成操作历史添加一个插槽来扩展矩阵的类。
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
答案
鉴于您处于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
方法。
您可以只创建S3方法,但这会让您遇到麻烦,如帮助页面?Methods_for_S3
所述
(见:https://www.rdocumentation.org/packages/methods/versions/3.4.3/topics/Methods_for_S3)
另一答案
是的,您可以为您的班级添加print
方法:
print.newMatrix <- function(x, ...) {
print.default(x@.Data, ...)
}
> print(m)
[,1] [,2]
[1,] 1 3
[2,] 2 4
以上是关于默认情况下,不要打印类实例的所有插槽的主要内容,如果未能解决你的问题,请参考以下文章
如何在没有 dralogfragment 实例的情况下从适配器显示对话框片段?