如何在R6对象中分派summary()方法
我正在使用R6构建一个对象,其中字段包括数据帧和其他信息。如何在R6对象中分派summary()方法,r,methods,r6,generic-function,R,Methods,R6,Generic Function,我正在使用R6构建一个对象,其中字段包括数据帧和其他信息。 我定义了第一个方法$print(),我可以将其称为obj1$print()或print(obj1),两种方法都很好 > obj1$print() test object name: AA > print(obj1) test object name: AA 我定义了第二个方法$summary(),它是一个与$print()相同的通用函数:在这种情况下,调用obj1$summary()的效果与预期的一样: > obj1
我定义了第一个方法
$print()
,我可以将其称为obj1$print()
或print(obj1)
,两种方法都很好
> obj1$print()
test object name: AA
> print(obj1)
test object name: AA
我定义了第二个方法$summary()
,它是一个与$print()
相同的通用函数:在这种情况下,调用obj1$summary()
的效果与预期的一样:
> obj1$summary()
test object name: AA
alpha beta
Min. :-1.63751 a :1
1st Qu.:-0.38065 b :1
Median :-0.05854 c :1
Mean :-0.01360 d :1
3rd Qu.: 0.46194 e :1
Max. : 1.34755 f :1
(Other):4
但是summary(obj1)
返回一个错误:
对象[[i]]中出错:用于子集设置环境的参数错误
示例代码如下所示:
testobj <- R6::R6Class(classname = "testobj",
public = list(
name = NULL,
data = NULL,
initialize = function(name, data) {
self$name <- name
self$data <- data
},
print = function(...) {
cat("test object name: ", self$name, "\n", sep = "")
invisible(self)
},
summary = function() {
cat("test object name: ", self$name, "\n", sep = "")
summary(self$data)
}
)
)
obj1 <- testobj$new(name = "AA",
data = data.frame(alpha = rnorm(10),
beta = letters[1:10]))
testobjS3方法,您正在寻找的方法与R6方法不同。首先,它们不是对象的一部分
为您的类创建一个S3方法:
summary.testobj <- function(obj) {
obj$summary()
}
summary(obj1)
summary.testobj谢谢@SmokeyShakers。为了确保我理解你:1$print()
被定义为S3和R6方法,而$summary()
被定义为S3方法。2.您的意思是将整个类重写为S3对象,还是在R6对象中包含S3方法?这可能吗?所以您可以看到R6在这里有自己的默认S3打印R6:::print.R6
。但是它没有一个摘要方法。如果我是你,我不会重写任何东西。我认为S3和R6可以很好地协同工作。你的摘要.testobj
证明了这一点。谢谢,现在很清楚了,我明白了背后的逻辑