2015-10-07 108 views
0

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)不起作用并产生一个错误。

我正在寻找一种方法,使这项工作。

+0

凡'lmer'哪里来的? – lgautier

+0

对不起,来自lme4 – fsociety

回答

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) 

(见行动getmethod rpy2的文档中:http://rpy2.readthedocs.org/en/version_2.7.x/robjects_oop.html#manual-r-in-python-class-definition)。

但是,这里我怀疑你是在R的globalenv中创建了一个叫做summary的函数,或者对于你想要的对象真的没有函数summary。 (这个例子不是自给自足的)。

+0

你的代码有一些错误。第一行不起作用。另外,getMethod方法不起作用。你可以定制这个问题的答案吗? – fsociety

+0

@fsociety。普通的错字('import'而不是'importr')。没有一个自给自足的例子,答案就是人们可以做出的答案。 – lgautier

0

summary的签名不是merMod,但merModLmerTest,虽然是类lmerMod的:

my_summary = methods.getMethod("summary", signature="merModLmerTest")