我目前尝试使用Rpy2将lme4
包与lmerTest
包结合使用。后者扩展/替换基础summary
函数。
我用以下方式使用它:
import rpy2.robjects
from rpy2.robjects.packages import importr
r = rpy2.robjects.r
lme4 = importr('lme4')
lmerTest = importr('lmerTest')
m = lme4.lmer("a ~ b", data=data)
r.summary(m)
现在的主要问题是,summary
仍然使用summary
的经典基本功能,而不是lmerTest
提供的基本功能。但是,lmerTest
不会直接为summary
函数提供接口,而只会覆盖基本函数。因此,lmerTest.summary(m)
不起作用并产生错误。
我正在寻找一种方法来完成这项工作。
答案 0 :(得分:0)
与S4系统交互的一种奇特方式可以是
from rpy2.robjects.methods import importr
# R package to interact with the S4 system for OOP
methods = importr('methods')
# get the method with the wanted signature.
my_summary = methods.getMethod("summary", signature="merMod")
# I assume the signature wanted to be `merMod`
# If not sure, you can do on you object `m`:
# tuple(m.rclass)
my_summary(m)
(请参阅rpy2的文档中的getmethod
:http://rpy2.readthedocs.org/en/version_2.7.x/robjects_oop.html#manual-r-in-python-class-definition)。
但是,我怀疑你在R&#39的globalenv中创建了一个名为summary
的函数,或者对于你想要的对象,实际上没有函数summary
。 (这个例子不是自给自足的。)
答案 1 :(得分:0)
summary
的签名不是 merMod ,而是 merModLmerTest ,但 m 属于 lmerMod :
my_summary = methods.getMethod("summary", signature="merModLmerTest")