r语言 - 如何在 R6 对象中调度 summary() 方法



我正在使用R6构建一个对象,该对象字段包含数据框和其他信息。
我定义了第一个方法$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]))

我的理解是,在一个对象中,您可以定义与泛型函数同名的方法,并且这些方法会根据对象的类自动调度到函数,就像$print()一样。难道不是吗?
为什么相同的方法不适用于$summary()?我该如何解决这个问题?

非常感谢您的帮助。

S3 方法(即您要查找的(与 R6 方法不同。首先,它们不是对象的一部分。

为您的类创建一个 S3 方法:

summary.testobj <- function(obj) {
obj$summary()
}
summary(obj1)

相关内容

  • 没有找到相关文章

最新更新