#r #r6
#r #r6
Вопрос:
Я использую пакет R6 для OO-программирования в пакете, который я разрабатываю. Мой объект R6 хранит фрейм данных, а также другую информацию. Я хотел бы переопределить функцию data.frame() при вызове моего объекта R6, чтобы возвращался его сохраненный фрейм данных.
Возможно ли это?
Например:
library(R6)
myobj <- R6Class("myobj", list(
df = NULL,
args = NULL,
initialize = function(df, args=NULL) {
self$df <- df
self$args <- args
},
print = function(...) {
cat("myobj: n")
cat(" df: ", nrow(self$df), " x ", ncol(self$df), "n")
invisible(self)
},
data.frame = function(...) {
self$df
}
))
print(myobj) # works
df <- data.frame(myobj) # does not work
Я прочитал документацию R6, я думаю, я в замешательстве, как мы можем переопределить print, но не другие функции, вызываемые для объектов R6.
Комментарии:
1. разве вы не должны вызывать свой
data.frame
метод такимmyobj$data.frame()
образом?2. Да, но возможно ли также выполнить data.frame(myobj). Мой вопрос касается переопределения функции.
3. Вы не можете переопределить
data.frame
функцию. Однако вы могли бы определитьas.data.frame.myobj
метод. При вызовеas.data.frame(x)
R отправляет его сas.data.frame.myobj(x)
использованием механизма отправки S3. См . adv-r.had.co.nz/S3.html подробнее о S3 dispatch.