首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用rpy2调用R包数据

用rpy2调用R包数据
EN

Stack Overflow用户
提问于 2020-10-03 07:49:04
回答 1查看 362关注 0票数 0

我想在Python中使用来自R包library(ISLR)library(ISLR)数据。我在rpy2简介中进行了一些测试,如下所示:

代码语言:javascript
复制
from rpy2 import robjects
from rpy2.robjects.packages import importr, data
from rpy2.robjects import pandas2ri
pandas2ri.activate()

datasets = importr('datasets') # data(mtcars) in library(datasets)
mtcars = data(datasets).fetch('mtcars')['mtcars']

ISLR = importr('ISLR') # data(Auto) in library(ISLR)
Auto = data(ISLR).fetch('Auto')['Auto']

#r_df = mtcars # success!!!
r_df = Auto # fail???

df = pandas2ri.ri2py(robjects.DataFrame(r_df))
df.info()

然后我可以成功地测试data(mtcars) in library(datasets),而测试data(Auto) in library(ISLR)则显示错误

代码语言:javascript
复制
Parameter 'categories' must be list-like

我怎样才能解决这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-22 03:59:25

您使用的是什么版本的rpy2?我使用的是rpy2-3.3.6,在Conda环境中使用pip安装,R-4.0.3 (来自conda-forge)沿着Python-3.6.11 (来自conda),我能够同时阅读datasets_as和_Auto中的mtcar。请检查一下下面的结果

我认为您所看到的错误可能是错误,也可能是配置/依赖关系的副作用。您应该将您的rpy2版本升级到最新的>= 3.3.0,并仔细检查依赖项。

请查看这篇文章,了解rpy2 熊猫-如何将数据转换成熊猫?的功能是如何随时间变化的。

下面是我命令行中的整个序列:

Python3.6.11包由conda- linux (缺省值,2020年8月5日,20:09:42) GCC 7.5.0在linux类型“帮助”、“版权”、“信用”或“许可”上获得更多信息。

代码语言:javascript
复制
Importing relevant libraries

>>> import rpy2.robjects as ro
>>> import rpy2.robjects.packages as rpackages
>>> from rpy2.robjects.vectors import StrVector
>>> from rpy2.robjects.packages import importr, data

Importing packages and reading in the data

>>> datasets = importr('datasets')
>>> mtcars = data(datasets).fetch('mtcars')['mtcars']

>>> ISLR = importr('ISLR')
>>> Auto = data(ISLR).fetch('Auto')['Auto']

>>> r_df_mtcars = mtcars (using labels to clarify origin of data)
>>> r_df_Auto = Auto

Converting R Data frames into Pandas Data frames
*Note* the function **conversion.rpy2py** New from rpy2 version 3.3.0

>>> pd_df_mtcars = ro.conversion.rpy2py(r_df_mtcars)
>>> pd_df_Auto = ro.conversion.rpy2py(r_df_Auto)

Examine the data using the Pandas head() for both

>>> pd_df_mtcars.head()
                    mpg  cyl   disp     hp  drat     wt   qsec   vs   am  gear  carb
Mazda RX4          21.0  6.0  160.0  110.0  3.90  2.620  16.46  0.0  1.0   4.0   4.0
Mazda RX4 Wag      21.0  6.0  160.0  110.0  3.90  2.875  17.02  0.0  1.0   4.0   4.0
Datsun 710         22.8  4.0  108.0   93.0  3.85  2.320  18.61  1.0  1.0   4.0   1.0
Hornet 4 Drive     21.4  6.0  258.0  110.0  3.08  3.215  19.44  1.0  0.0   3.0   1.0
Hornet Sportabout  18.7  8.0  360.0  175.0  3.15  3.440  17.02  0.0  0.0   3.0   2.0
>>> pd_df_Auto.head()
    mpg  cylinders  displacement  horsepower  weight  acceleration  year  origin                       name
1  18.0        8.0         307.0       130.0  3504.0          12.0  70.0     1.0  chevrolet chevelle malibu
2  15.0        8.0         350.0       165.0  3693.0          11.5  70.0     1.0          buick skylark 320
3  18.0        8.0         318.0       150.0  3436.0          11.0  70.0     1.0         plymouth satellite
4  16.0        8.0         304.0       150.0  3433.0          12.0  70.0     1.0              amc rebel sst
5  17.0        8.0         302.0       140.0  3449.0          10.5  70.0     1.0                ford torino

To convert Pandas df to R df you can use:

>>> r_mtcars_df = ro.conversion.py2rpy(pd_df_mtcars)
>>> r_Auto_df = ro.conversion.py2rpy(pd_df_mtcars)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64181911

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档