【发布时间】:2021-04-15 10:25:23
【问题描述】:
我试图定义一个扩展 data.frame 的 S4 类,它的行为就像 data.frame,但在插槽 info 中保存了一些附加信息。这适用于我将在data.frame 上使用的几乎所有功能,但在View() 上失败,因为当我在课堂上使用View() 时,它不会显示您在使用@987654331 调用它时看到的表格形式@ 而是您在列表中调用 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 来修复。