【问题标题】:How to access the internal functions of an R package using rpy2?如何使用 rpy2 访问 R 包的内部函数?
【发布时间】:2020-09-20 04:23:22
【问题描述】:

我正在使用 rpy2 在 Python 中使用 R 的 GMCM 包。 GMCM 包的一些内部函数只能使用::: 运算符访问。例如 the function qgmm.marginal 不能以通常的方式使用 rpy2 访问。

这是我的 Python 代码:

import rpy2

import rpy2.robjects as robjects
from rpy2.robjects.packages import importr  
gmcm_r = importr('GMCM')
data_r = gmcm_r.SimulateGMCMData(n = 100, m =3, d=2)

print(gmcm_r.Uhat(data_r.rx2('z'))) # works
print(gmcm_r.qgmm.marginal(gmcm_r.Uhat(data_r.rx2('z')))) # does not work
# AttributeError: module 'GMCM' has no attribute 'qgmm'

对应的R代码是

library(GMCM)
data = SimulateGMCMData(n = 100, m =3, d=2)
u = Uhat(data$z) #works
GMCM:::qgmm.marginal(u, theta)#works

我们如何使用 rpy2 访问这些内部函数?

【问题讨论】:

    标签: python r rpy2


    【解决方案1】:

    你有两个错误:

    1. 您保留了一个 R 语法点 (.),您应该已将其转换为 Python 语法下划线 (_)。这就是导致您观察到的错误的原因。
    2. 不过,一旦您修复了该错误,您会发现一个新错误:您没有为尝试调用的函数指定 theta 参数。

    这是一个可行的解决方案:

    import rpy2
    
    import rpy2.robjects as robjects
    from rpy2.robjects.packages import importr  
    gmcm_r = importr('GMCM')
    data_r = gmcm_r.SimulateGMCMData(n = 100, m =3, d=2)
    
    print(gmcm_r.Uhat(data_r.rx2('z'))) # works
    ## [Output omitted]
    
    u = gmcm_r.Uhat(data_r.rx2('z'))
    theta = data_r.rx2('theta') ## Need to specify theta
    # print(gmcm_r.qgmm.marginal(u, theta)) ## Need to change the dot after qgmm
    print(gmcm_r.qgmm_marginal(u, theta))   ## to an underscore
    
                 [,1]        [,2]
      [1,]   8.660195  0.26664200
      [2,]   7.626162  7.86828143
      [3,]   7.862762  8.75474254
    ## [output truncated]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-24
      • 1970-01-01
      • 2020-02-24
      • 1970-01-01
      • 2011-04-11
      • 2022-11-19
      • 2015-11-07
      • 1970-01-01
      相关资源
      最近更新 更多