问题描述
我试图定义一个扩展 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 版本下它的外观截图。
解决方法
我自己弄明白了:原来这种行为似乎取决于我使用的 RStudio 版本。从 RStudio 版本 1.3.1093 更新到 1.4.1106 后,View(d)
和 View(as.data.frame(d))
显示相同的结果。