簡體   English   中英

如何使用 rpy2 訪問 R package 的內部函數?

[英]How to access the internal functions of an R package using rpy2?

我正在使用GMCM在 Python 中使用 R 的 GMCM package。 GMCM package 的一些內部函數只能使用:::操作符訪問。 例如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 訪問這些內部函數?

你犯了兩個錯誤:

  1. 您保留了 R 語法點 ( . ),您應該已將其轉換為 python 語法下划線 ( _ )。 這就是導致您觀察到的錯誤的原因。
  2. 但是,一旦您修復了該錯誤,您會發現一個新錯誤:您沒有為您嘗試調用的 function 指定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]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM