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

时间:2017-09-18 07:34:11

标签: r python-3.x statistics time-series rpy2

我正在使用jupyter笔记本中的vars包

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

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中具有类属性'varest'的列表的元素,如

中所述

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

第45页

我如何从python访问varresult

1 个答案:

答案 0 :(得分:0)

我想我已经弄明白了。

我得到了很好的帮助

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

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

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

中所述

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

虽然不同,但在

中回答了类似的问题

extract coefficients from R lme model in rpy2

基于我提出的问题

让我们提取变量.rx2,它代表内生变量的数据矩阵。

这可以通过python属性y作为

来实现
rx2

您会发现A=Model2.rx2('y') y=pd.DataFrame(np.array(A),columns=A.names[1]) y.head() 与原始数据框y.head()相同

然而,提取元素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"