【问题标题】:Deriving a new class from data.table从 data.table 派生一个新类
【发布时间】: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


【解决方案1】:

[ ]的问题在data.table开发版本1.9.3中已经解决,现在CRAN中已经是1.9.4版本了,只要安装的data.table包是up-to,应该不存在这个问题-日期。

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

【讨论】:

    猜你喜欢
    • 2017-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-18
    • 2012-03-05
    • 1970-01-01
    • 2015-10-23
    相关资源
    最近更新 更多