从data.table派生一个新类

时间:2014-07-22 08:01:22

标签: r data.table

这是我想做的最小例子。我想基于data.table创建自己的类。我想保留大多数data.table函数可供我自己的类的用户使用,但是虽然计算可以按需要工作,但是在使用data.table语法时,我的派生类的标记将被删除,如下例所示。

library(data.table)
test.dt <- data.table(a=1:10, b=rep(1,10))
setattr(test.dt, "class", c("deriv", class(test.dt)))
class(test.dt)

保留“deriv”类属性:

test0.dt <- copy(test.dt)
class(test0.dt)

“deriv”类属性被丢弃!

test1.dt <- test.dt[ a>=2 & a<=9 ]
class(test1.dt)
test2.dt <- test.dt[ a %between% c(2,9)]
class(test2.dt)
test3.dt <- test.dt[ 2:9 ]
class(test3.dt)

有没有办法解决这个问题,而不是编写我希望为派生类保留的所有data.table函数的专用版本?我想我只需要在data.table函数上使用包装器来显式复制/恢复类属性。

在我看来,这是一种“意外”行为。为了比较,下面的代码永远不会丢弃“deriv”类属性。

test.df <- data.frame(a=1:10, b=rep(1,10))
class(test.df) <- c("deriv", class(test.df))
class(test.df)
test0.df <- test.df
class(test0.df)
test1.df <- test[ test.df$a>=2 & test.df$a<=9 , ]
class(test1.df)
test2.df <- test.df[ 2:9, ]
class(test2.df)

1 个答案:

答案 0 :(得分:0)

[ ]的问题在data.table开发版本1.9.3中得到解决,现在版本1.9.4在CRAN中,只要安装的data.table包已启动,问题就不应该存在-to-日期。

请注意,data.table::rbindlist()继续删除data.table 1.9.4中的派生类属性。