如何使用 rpy2 访问 R 包的内部函数?
How to access the internal functions of an R package using rpy2?
我正在使用 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 访问这些内部函数?
你犯了两个错误:
- 您保留了一个 R 语法点 (
.
),您应该将其转换为 python 语法下划线 (_
)。这就是导致您观察到的错误的原因。
- 不过,一旦你修复了那个错误,你就会发现一个新的错误:你没有为你试图调用的函数指定
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]
我正在使用 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 访问这些内部函数?
你犯了两个错误:
- 您保留了一个 R 语法点 (
.
),您应该将其转换为 python 语法下划线 (_
)。这就是导致您观察到的错误的原因。 - 不过,一旦你修复了那个错误,你就会发现一个新的错误:你没有为你试图调用的函数指定
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]