【发布时间】:2014-07-22 08:01:21
【问题描述】:
这是我想做的一个最小的例子。我想基于 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)
保留“派生”类属性:
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)
【问题讨论】:
-
我很确定您使用的是旧版本的
data.table。可以发一下sessionInfo()吗? -
我使用的是当前 CRAN 版本 1.9.2 的 data.table。我刚从Github拉出来,安装构建了当前的开发版本1.9.3,问题解决了。谢谢!
-
@PedroAphalo 你能回答你的问题并将其标记为已回答吗?
标签: r data.table