使用一个具有多个对象的类

时间:2015-01-20 19:26:16

标签: r

这是一个由特定事件驱动的一般性问题。

当一个对象拥有多个类,每个类具有不同的泛型动作时,如何指定使用“this”类而不是“that”类?

此处的示例代码与geepack捆绑在一起。

library(stargazer)
library(geepack)

data(dietox)
dietox$Cu <- as.factor(dietox$Cu)
mf <- formula(Weight~Cu*(Time+I(Time^2)+I(Time^3)))

gee0 <- glm(mf, data = dietox, family = poisson("identity")) # a wrong model
gee1 <- geeglm(mf, data=dietox, id=Pig, family=poisson("identity"),corstr="ar1")

class(gee0)
class(gee1)

summary(gee0)
summary(gee1)

stargazer(gee0, type = "text")
stargazer(gee1, type = "text")

我想使用“glm”类对象,而不是“geeglm”类对象。

@Richard Scriven:我想把结果拉到一个观星(...)报告中。谢谢你澄清的问题。

1 个答案:

答案 0 :(得分:2)

使用class(foo)属性的类系统不是强类型的。 R使用类向量来确定将该对象传递给类似print的泛型时使用的方法。例如,如果您要调用print(gee1),R将首先搜索名为print.geeglm的函数,在这种情况下,它会在包geepack中找到,并且R使用提供的参数调用该函数到print()

如果R找不到名为print.geeglm的函数,则会搜索print.gee,然后搜索print.glm,然后搜索print.default

简而言之,gee1不包含具有不同类的3个对象,它是具有类向量的单个对象,通知R在哪里查找泛型方法。

为了让事情稍微混乱,R有多种类型系统,而且类型vetcor被S3类型系统使用。谷歌搜索“R s3课程”将为您提供有关R课程系统的更多信息。