Я создаю объект ссылочного класса способом, аналогичным приведенному ниже:
# 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
.