如何访问 python 中 R 对象的 class 属性?

How to access class attribute of an R object in python?

我在 jupyter notebook 中使用的是 vars 包

为了简单起见,Jupyter notebook 上的前几行应该是

import pandas as pd, numpy as np

# Call function from R
import os
os.environ['R_USER'] = 'D:\Anaconda3\Lib\site-packages\rpy2'
import rpy2.robjects as robjects
from rpy2.robjects import pandas2ri
pandas2ri.activate()

from rpy2.robjects.packages import importr
utils = importr('utils')
ggplot2 = importr("ggplot2", lib_loc = "C:/.../R/win-library/3.3")

# Import vars
Rvars = importr("vars", lib_loc = "C:/.../R/win-library/3.3")

我有一个数据框说

df = pd.DataFrame(np.random.random((108, 2)), columns=['Number1','Number2'])
df.head()

我编码了

Model2=Rvars.VAR(df,p=3, type='const')
type(Model2)

并收到以下内容

rpy2.robjects.vectors.ListVector

使用元组编码时

tuple(Model2.slots)

我收到了

('names', 'class')

因此将名称打印为

print(Model2.names)

生成

[1] "varresult"    "datamat"      "y"            "type"         "p"           

 [6] "K"            "obs"          "totobs"       "restrictions" "call"

我的问题

中所述,以上所有值只是 R 中具有 class 属性 'varest' 的列表的元素

https://cran.r-project.org/web/packages/vars/vars.pdf

第 45 页

如何从 python 访问 varresult

我想我已经弄明白了。

我得到了很好的帮助

http://rpy.sourceforge.net/rpy2/doc-2.1/html/introduction.html

为了便于说明,请考虑获取表示内生变量数据矩阵的变量 y 的简单情况。

.rx.rx2 是 rpy2 中的新功能,如

中所述

http://rpy.sourceforge.net/rpy2/doc-2.2/html/changes.html

虽然不同,但在

中回答了类似的问题

根据我提出的问题

让我们提取代表内生变量数据矩阵的变量y

这可以通过 python 属性 rx2 实现

A=Model2.rx2('y')
y=pd.DataFrame(np.array(A),columns=A.names[1])
y.head()

你会发现y.head()和原来的dataframe是一样的df.head()

然而,提取元素varresult有点复杂

我遵循了与

中类似的论点
A=Model2.rx2('varresult')
print(A.names)

Output: [1] "Number1" "Number2"

然后

B=A.rx2('Number1')
print(B.names)

Output: 
[1] "coefficients"  "residuals"     "effects"       "rank"         

 [5] "fitted.values" "assign"        "qr"            "df.residual"  

 [9] "xlevels"       "call"          "terms"         "model"

例如,要从第一个方程得到回归的残差,可以使用以下

resid1=np.array(B.rx2('residuals'))