【问题标题】:R: finding the source code that produces the output for S4 slot?R:找到产生 S4 插槽输出的源代码?
【发布时间】:2013-01-17 02:41:43
【问题描述】:

大家好,

当 'lme4' 中的 'lmer' 函数运行时,它会生成一个带有很多插槽的 S4 对象。我对这些插槽之一感兴趣,即模型@X,以及如何产生这个“X”插槽输出。我想尝试为我正在使用的不同模型函数(glmmPQL)重现这个输出,它不会自动产生这个'X'输出(仅供参考'lmer'产生一个类'mer'的对象,插槽'X'是一个模型固定效应的矩阵)。 下面的代码显示了我在说什么。

我想弄清楚这个“X”数据是如何产生的?我通过在没有'()'的终端中编写'lmer'的代码来查看它,但我在那里找不到任何东西。我也试过 showMethod('lmer') 但它说 function 'lmer': .

只是想知道是否有办法获取“X”插槽(或 S4 对象中的任何插槽)正在做什么的源代码?或者有谁知道如何重现这个?非常感谢您的帮助和时间。

    library(lme4)
    # here is a quick example of what I am looking at using the cake dataset in the 'lme4' package
    m <- lmer(cakeglmm<- lmer(angle ~ temp + recipe + (1| replicate), family = gaussian, data = cake)

    slotNames(m)
    head(m@X)

【问题讨论】:

  • 您可以在 CRAN 获取每个 R 包的源代码,包括核心。

标签: r s4 slot lme4 lmer


【解决方案1】:

打印lmer 开始时还不错。这不会显示m@X 的设置位置,但您可以看到lmer 调用了哪些方法。

lmer 中的方法可以使用lme4:::methodName 访问。

如果您查看lme4:::lmer_finalize 内部,您会看到(释义):

ans <- new(Class = "mer", ..., X = fr$X, ...)

这就是@X 插槽被填充的地方。备份lmer,您会看到fr 来自lme4:::lmerFrames,具体而言fr$X 的计算公式为:

X <- if (!is.empty.model(mt)) 
    model.matrix(mt, mf, contrasts)
else matrix(, NROW(Y), 0)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-17
    • 1970-01-01
    • 1970-01-01
    • 2015-06-11
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    相关资源
    最近更新 更多