Расширение методов as.data.frame и as.matrix для объекта, созданного с помощью setRefClass - PullRequest
0 голосов
/ 02 ноября 2018

Я создаю объект ссылочного класса способом, аналогичным приведенному ниже:

# Class -------------------------------------------------------------------

myDataFrame <- setRefClass(Class = "myDataFrame",
                           fields = list(data = "data.frame",
                                         key_columns = "character"))

# Instance ----------------------------------------------------------------

myCars <- myDataFrame$new(data = mtcars,
                          key_columns = c("mpg", "cyl"))

Я создаю show метод для этого класса:

myDataFrame$methods(
    show = function() {
        cat(
            paste("Rows:", nrow(data)),
            paste("Cols:", ncol(data)),
            paste("Summary for key columns:", paste(key_columns, collapse = " ")),
            sep = "\n"
        )
        sapply(data[, key_columns], function(key_col) {
            print(summary(key_col))
        })
    }
)

это работает как предполагалось:

>> myCars
Rows: 32
Cols: 11
Summary for key columns: mpg cyl
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  10.40   15.43   19.20   20.09   22.80   33.90 
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  4.000   4.000   6.000   6.188   8.000   8.000 

Задача

Я бы хотел расширить этот класс методами as.matrix и as.data.frame.

myDataFrame$methods(
    as.matrix = function() {
        as.matrix(data)
    }
)

Это не похоже на работу:

>> myCars$as.matrix()
Error in as.matrix(data) : unused argument (data)
>> as.matrix(myCars)
Error in as.vector(x, mode) : 
  cannot coerce type 'environment' to vector of type 'any'

Желаемые результаты

  • Для as.matrix в контексте предоставленного примера результат должен быть эквивалентен as.matrix(mtcars)
  • Для as.data.frame результат должен быть эквивалентен as.data.frame(mtcars[,c("mpg", "cyl")]), где выбранные столбцы отражают key_columns.
...