setClassUnion 无法加入带有 coxph 的 glm class

setClassUnion fails joining a glm with a coxph class

当我尝试在 R 中创建一个 class 时,包含一个应该接受 glm class 对象或 coxph class 的插槽一个我在包构建过程中遇到错误 Error in setClassUnion(name = "glmORcoxph", members = c("glm", "coxph")) : the member classes must be defined: not true of "coxph"。 我尝试将 @import@importClassesFrom@importFrom Roxygen 指令放入我的源代码,但没有成功。这是我用来创建 DoseVolumeModel class:

的代码
setClassUnion(name = "ConfidenceInterval", members = c("NULL", "numeric"))
setClassUnion(name = "glmORcoxph", members = c("glm", "coxph"))
setClass("DoseVolumeModel", 
     representation(
       output.matrix = "matrix",
       fitted.model = "glmORcoxph",
       fitted.value = "numeric",
       CI = "ConfidenceInterval",
       fitted.parameter = "character"
     )
)

我该如何解决?

您不能使用像 coxph 这样的 S3 classes,除非它们已经预先注册。您可以通过调用

setOldClass("coxph")

在您致电 setClassUnion 之前。然后您可以自由使用 coxph 作为插槽或 class 联合中的 class 定义。

请注意,对于此类 coxph 对象,您不能保证太多,因为 R 不强制它们具有任何特定属性。任何用户都可以自由地做类似

的事情
x <- 1
class(x) <- "coxph"

(或者拿一个真正的 coxph 对象和 NULL 部分)

它们仍然是您 classes 的有效输入。您可能希望实施一些输入检查以考虑到这一点。