rbind丢弃了定制的S3类

rbind丢弃了定制的S3类,r,R,我创建了两个data.tables,并为它们提供了一个自定义类。当我对它们执行rbind时,结果将不再继承自定义类。如何确保结果包含自定义类: > mytable <- data.table(x = c(1,2), y = c(2,3)) > class(mytable) <- c("myclass", class(mytable)) > class(mytable) [1] "myclass" "data.table" "data.frame" > r

我创建了两个data.tables,并为它们提供了一个自定义类。当我对它们执行rbind时,结果将不再继承自定义类。如何确保结果包含自定义类:

> mytable <- data.table(x = c(1,2), y = c(2,3))
> class(mytable) <- c("myclass", class(mytable))
> class(mytable)
[1] "myclass"    "data.table" "data.frame"
> result <- rbind(mytable, mytable)
> class(result)
[1] "data.table" "data.frame"

感谢您的帮助

您可以定义自己的S3方法来保留该类

rbind.myclass <- function(...) {
    res <- rbind.data.frame(...)        
    class(res) <- c("myclass", class(res))
    res
}
result <- rbind(mytable, mytable)
class(result)

rbind.myclass太棒了,这对于这个特定的情况就足够了。是否有一种方法可以概括这一点:每次data.table也有myclass,以确保它总是在执行data.table函数?data.table函数(如中所示)后添加myclass,例如“聚合”,它严格来说不是data.table函数。但我最初的问题同样适用于这里。为了使我的代码保持完整,我想应该用您建议的方法重写所有这些函数。或者你能更有效地做这样的事情吗?你最终想做什么?也许S3类不是一个好方法。我已经有了一个相当大的工具,可以很好地工作。不过,我目前正在扩展它,并注意到S3类的一致性有多高。关于如何为所有data.ftable/frame函数执行此操作,我的问题是确保我的所有代码都能继续工作。但你目前的解决方案也足够了。谢谢
rbind.myclass <- function(...) {
    res <- rbind.data.frame(...)        
    class(res) <- c("myclass", class(res))
    res
}
result <- rbind(mytable, mytable)
class(result)