Переопределение метода в OO-программировании R6

#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.