【问题标题】:View() for S4 class extending data.frameView() 用于 S4 类扩展 data.frame
【发布时间】: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 来修复。

标签: r s4


【解决方案1】:

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

【讨论】:

  • 您是否知道这些版本之间的区别以及使其工作的相关更改?
  • 很遗憾没有。我搜索了发行说明,但找不到任何我认为可以解释行为变化的内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-02
  • 2019-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-21
相关资源
最近更新 更多