r - 为通过 setRefClass 创建的对象扩展 as.data.frame 和 as.matrix 方法
问题描述
我正在以类似于以下示例的方式创建引用类对象:
# 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
。
解决方案
当您的方法名称被称为同一事物时,您需要为 as.matrix 指定命名空间,例如
myDataFrame$methods(
as.matrix = function() {
base::as.matrix(data)
}
)
推荐阅读
- git - git clone :输入的 MAC 损坏。(15760/787968)
- c# - 如何根据响应时间实施健康检查
- c# - WebSocket 连接失败,出现 socketerror
- python - 跨运行将唯一的日志记录调用关联到一个 id
- lldb - 每当在调试器中调用的函数崩溃时,禁用 LLDB 恢复状态
- save - 如何在 DM 3.4 中重新保存光盘上现有的图像(强制替换。)
- python - 合并具有不同行的熊猫数据框?
- mongodb - Datastax 企业版和 MongoDB 企业版的许可费用是多少?
- python - JSON 格式的 Ansible 动态库存未得到解析
- pandas - 将Dataframe列作为变量传递给循环中的dict