2016-09-15 139 views
3

我无法定义继承所有data.frame方法的类。例如,如果我是定义一个类时间表这可以表示为一个data.frame:在R中扩展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 

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

回答

0

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