【发布时间】:2014-08-05 11:25:55
【问题描述】:
问题:
我希望创建一个扩展 data.table 的引用类。
动机是
- 想要一个带有自定义方法和可变字段的
data.table - 仍然希望所有现有语法(例如索引、子集、合并等)按预期工作
问题是我到目前为止失败了。
尝试:
我试过了:
MyDataTable <- setRefClass("MyDataTable",
methods = list(
clearCell = function(i, j) { # A trivial custom method - sets a cell to NA
.self[i, (j) := NA]
}
),
contains = "data.table"
)
MyDataTable(a = 1:26, b = letters)$clearCell(1, 1)
但得到了错误:
Error in envRefSetField(.Object, field, classDef, selfEnv, elements[[field]]) :
‘a’ is not a field in class “MyDataTable”
但是,我期待的是:
a b
1: NA a
2: 2 b
3: 3 c
4: 4 d
5: 5 e
6: ... etc etc
怎么了?
【问题讨论】:
-
我很好奇动机 - 请举一个问题示例?
-
@eddi - 很多例子说明了为什么人们可能想要扩展
data.table的功能。例如,考虑一个data.table,它是一个数据库表的抽象。也就是说,我可以简单地通过MyTable[id == 4, field := "a"]写入数据库表,并且 还可以更新我的 R 会话中的内存表。为此,这种扩展的data.table需要跟踪其他变量,例如(数据库连接、它所链接的数据库表的名称等),这些变量最好存储为引用类字段。
标签: r data.table reference-class