S4 类的 View() 扩展 data.frame

问题描述

我试图定义一个扩展 data.frame 的 S4 类,它的行为就像一个 data.frame,但在插槽 info 中包含一些附加信息。这对于我在 data.frame 上使用的几乎所有函数都很好,但在 View() 上失败了,因为当我在我的班级上使用 View() 时,它不会显示您在以下情况下看到的表格形式使用 data.frame 调用它,而不是您在列表中调用 View() 时通常看到的形式。

这是我尝试过的:

#Define class
setoldClass("data.frame")
setClass(
  "myDF",contains= "data.frame",slots = c(info = "character")
)

#Set method for as.data.frame
setMethod(
  "as.data.frame",signature = "myDF",function(x,...){
    S3Part(x,strictS3 = T)
  }
)

#create instance
d <- new("myDF",data.frame(x=1:5,y=6:10),info="someInfo")

#This doesn't show the tabular structure but looks like calling View() on a list
View(d)

#What I want it to look like
View(as.data.frame(d))

View() 的文档指出“对象 x 被强制(如果可能)到一个数据框”,这就是我为 as.data.frame() 实现方法的原因,希望这能解决问题。>

如果您对我在这里错误提供任何意见,我将不胜感激。

编辑:我添加了我在答案中提到的两个 RStudio 版本下它的外观截图。

View(d) under RStudio 1.3.1093

View(d) under RStudio 1.4.1106

解决方法

我自己弄明白了:原来这种行为似乎取决于我使用的 RStudio 版本。从 RStudio 版本 1.3.1093 更新到 1.4.1106 后,View(d)View(as.data.frame(d)) 显示相同的结果。