【问题标题】:Rpy2 import package that overrides base function覆盖基本功能的 Rpy2 导入包
【发布时间】:2015-10-07 00:10:45
【问题描述】:

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

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

【问题讨论】:

  • lmer 来自哪里?
  • 对不起,来自lme4

标签: python rpy2


【解决方案1】:

一种与 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 的 globalenv 中创建了一个名为 summary 的函数,要么实际上没有函数 summary 用于您想要的对象。 (这个例子不是自给自足的)。

【讨论】:

  • 您的代码中有一些错误。第一行不起作用。此外,getMethod 方法不起作用。您能否针对该问题量身定制答案?
  • @fsociety 。小错误(import 而不是importr)。答案是没有一个自给自足的例子可以做出什么。
【解决方案2】:

summary 的签名不是 merMod,而是 merModLmerTest,虽然 m 属于 lmerMod 类:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-20
    相关资源
    最近更新 更多