Rpy2导入包覆盖基本功能

时间:2015-10-07 00:10:45

标签: python rpy2

我目前尝试使用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)不起作用并产生错误。

我正在寻找一种方法来完成这项工作。

2 个答案:

答案 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的文档中的getmethodhttp://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")