Я использую R6 для создания объекта, поля которого включают в себя фрейм данных и другую информацию.
Я определил первый метод $print()
, который я могу назвать как obj1$print()
или print(obj1)
, и оба способа прекрасно работают ,
> obj1$print()
test object name: AA
> print(obj1)
test object name: AA
Я определил второй метод $summary()
, который является обобщенной c функцией, такой же, как $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]))
Насколько я понимаю, внутри объекта вы можете определить методы с тем же именем, что и функции generi c, и эти методы автоматически отправляются в функцию на основе класса объекта, так как случается с $print()
. Разве это не правильно?
Почему тот же подход не работает с $summary()
? Как я могу это исправить?
Большое спасибо за помощь.