r - 在 R 中扩展 data.frame 类以继承 data.frame 方法

标签 r oop inheritance s4

我在定义一个继承 data.frame 的所有方法的类时遇到了问题。例如,如果我要定义一个类时间线,它可以表示为一个 data.frame:

data.frame(task = c("Read Permutation City", "Learn S4 oop"), 
           from = c(Sys.Date(), Sys.Date()),
           to = c(Sys.Date() + 5, Sys.Date() + 1))

相反,我想定义一个类“时间轴”,它会保留所有 data.frames 方法,但会覆盖和添加几个方法(例如绘图、摘要和窗口)。在其他语言中,这相当简单。

我想使用 S4 类结构来做到这一点。我尝试使用 contains 实现 S4 类争论,然而,我一定做错了什么,因为结果不是你对 data.frame 的期望。
timeline <- setClass(Class = "timeline", contains = "data.frame")

timeline <- function(task, from, to) {
  new("timeline", data.frame(task = task, from = from, to = to))
}

tm <- timeline("Run", Sys.Date(), Sys.Date() + 5)
getClass("timeline") # Class "timeline" .... Extends: Class "data.frame", directly
inherits(tm, "data.frame") # TRUE

nrow(tm) # 0
ncol(tm) # 3

tm # Prints S4 info
print(tm) # Expected output

这样做的正确方法是什么?

最佳答案

使用 setOldClass("data.frame")之前 setClass() .

关于r - 在 R 中扩展 data.frame 类以继承 data.frame 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39521723/

相关文章:

java - Hibernate 中没有鉴别器列的按层次结构表策略

r - 尝试矢量化 R 中的 for 循环

c# - 无法调用接口(interface)的已实现函数(名称在当前上下文中不存在)

c++ - 如何使用默认参数从构造函数调用 super 构造函数?

oop - 如何在复杂的纸牌游戏中平衡多态/继承/TypeData架构与原型(prototype)/享元模式的技巧?

javascript函数调用性能与new

c++ - 使用具有指向派生类对象的指针的基类指针数组调用派生类方法

python - 使用 R 的 "mutate(across(cols = ..."对 python 中的列进行 ntiles

r - ggplot2 每个主要中断的次要中断的整数倍

删除带有或不带有NA的常量列