如何继承stan的S4 class

How to inherit stan's S4 class

我使用 rstan::stan() 开发了一些包。我创建了一个函数,其 return 值是由 rstan::stan() 生成的 S4 class 对象。为了方便地访问估计值或添加数据信息,我想创建一个新的 S4 class 对象,它继承 rstan::stan() 的 S4 class,以便有新的插槽。

此外,新的 S4class 对象也可用于 rstan 中的任何函数,例如 rstan::traceplot().


fit  <-  rstan::stan( model_name=scr, data=data) # This is a fictitious code.

假设我们得到名为 fit 的 S4 (stanfit) 对象。

定义 stanfit

的扩展 class
InheritedClass  <- setClass("InheritedClass",

             # New slots
               representation(slotA="character",
                              slotB="character",
                              slotC="numeric"),


               contains = "stanfit"
)

使用现有的 S4 class 对象 创建继承的 class 的 S4 对象,即, fit, 所以我只需要为添加的新插槽输入值,即 slotA、slotB、slotC。

使用下面的代码,我们可以将旧 class 的 S4 对象转换为继承的 class:

fit2 <- as(fit,"InheritedClass")

使用它我们可以像下面这样编辑插槽:

   fit2@slotA <- "aaaaaaaaaaaa"

参见help(setClass)。我相信它会像

setClass("classname", slots = c(foo = "numeric", bar = "character"),
         contains = "stanfit")

而且我确定您必须在包中 DESCRIPTION 文件的 Imports: 行中包含 rstan 才能找到 S4 class stanfit.

的定义