【问题标题】:How to access class attribute of an R object in python?如何在python中访问R对象的类属性?
【发布时间】:2018-02-26 16:09:45
【问题描述】:

我正在使用 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 中具有类属性“varest”的列表的元素,如

中所述

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

第 45 页

如何从 python 访问varresult

【问题讨论】:

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


    【解决方案1】:

    我想我已经明白了。我得到了很好的帮助

    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

    虽然不同,但在

    中回答了类似的问题

    extract coefficients from R lme model in rpy2

    根据我提出的问题

    让我们提取变量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'))
    

    【讨论】:

    • 您所指的文档页面已经很老了。查看rpy2.bitbucket.io 的链接以获取最新文档。
    • @Igautier 非常感谢您的评论。但我使用的是 Windows 10,由于某种原因,我无法访问此处所述的 rpy2 v 2.9 stackoverflow.com/questions/11165123/… 因此,我只能访问我提供的文档
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-04
    • 1970-01-01
    • 2013-06-11
    • 1970-01-01
    • 2016-12-04
    • 1970-01-01
    • 2018-07-07
    相关资源
    最近更新 更多