我有一个用户定义的对象,它有一个包含3个属性的类。
i.e. > class(data)
[1] "cumulative" "data.table" "data.frame"
我希望重新编码[
,以便当我在我的对象上调用它时,它使用data.table
定义的函数,即[.data.table
,但返回我的用户定义的类。我该怎么做?
我尝试按如下方式创建一个功能,还有一些其他功能,但我无法让它工作
'[.cumulative' <- function(x,i,j,...) {
y <- NextMethod(.Generic)(x,i.j)
class(y) <- .Class
}
答案 0 :(得分:5)
This bug已在当前开发版1.9.3
中修复。来自NEWS:
如果另一个类继承自
data.table
;例如class(DT) == c("UserClass", "data.table", "data.frame")
然后DT[...]
现在在结果中保留UserClass
。感谢Daniel Krizian的报道,#5296(git #64)。测试补充。
require(data.table) ## 1.9.2
dt = data.table(x=1:5, y=6:10)
setattr(dt, 'class', c("foo", "data.table", "data.frame"))
class(dt)
# [1] "foo" "data.table" "data.frame"
## bug...
class(dt[, .N, by=x])
# [1] "data.table" "data.frame"
# -------------------------------
require(data.table) ## 1.9.3
dt = data.table(x=1:5, y=6:10)
setattr(dt, 'class', c("foo", "data.table", "data.frame"))
class(dt)
# [1] "foo" "data.table" "data.frame"
## bug fixed
class(dt[, .N, by=x])
# [1] "foo" "data.table" "data.frame"