重新编码'[.data.table'

Kha*_*oof 4 r dataframe data.table

我有一个用户定义的对象,它有一个包含3个属性的类.

i.e. > class(data)
     [1] "cumulative" "data.table" "data.frame"
Run Code Online (Sandbox Code Playgroud)

我希望重新编码,[以便当我在我的对象上调用它时,它使用已data.table定义的函数,[.data.table但返回我的用户定义的类.我该怎么做呢?

我尝试创建一个函数如下,以及一些其他变体,但我无法让它工作

'[.cumulative' <- function(x,i,j,...) {
  y <- NextMethod(.Generic)(x,i.j)
  class(y) <- .Class
}
Run Code Online (Sandbox Code Playgroud)

Aru*_*run 5

此错误已在当前开发版本中修复1.9.3.来自新闻:

如果另一个类继承自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"
Run Code Online (Sandbox Code Playgroud)