为什么rpy2使用太多RAM

时间:2017-08-21 15:42:36

标签: python rpy2

我正在尝试在我的电脑上设置rpy2。

我的配置:

  • Windows 10,16Go RAM
  • Anaconda:4.4.0 with python 3.6
  • 独立的R版本:3.4.1

Python包:

  • rpy2:2.8.6
  • pandas:0.20.3

我要做的第一件事就是加载我的数据集(来自UCI回购的成人):

import pandas as pd
original_data = pd.read_csv(
    "http://archive.ics.uci.edu/ml/machine-learning-databases/adult/adult.data",
    names=[
        "Age", "Workclass", "fnlwgt", "Education", "Education-Num", "Martial Status",
        "Occupation", "Relationship", "Race", "Sex", "Capital Gain", "Capital Loss",
        "Hours per week", "Country", "Target"],
        sep=r'\s*,\s*',
        engine='python',
        na_values="?")
original_data.head()

import sys
sys.getsizeof(original_data)
>> 34605590

现在我已经导入了不那么大的数据集...... 现在我按rpy2 documentation

所示启动R界面
from rpy2.robjects import r, pandas2ri
pandas2ri.activate()

控制R内存限制(结果为Mo)

import rpy2.robjects as robjects
r('memory.limit()')
>> array([ 2047.])

2Go我应该安全...我尝试将我的数据集传递给R。

r_dataframe = pandas2ri.py2ri(original_data)

---------------------------------------------------------------------------
RRuntimeError                             Traceback (most recent call last)
<ipython-input-17-5921ca574db2> in <module>()
----> 1 r_dataframe = pandas2ri.py2ri(original_data)

C:\Users\touleem\AppData\Local\Continuum\Anaconda3\lib\functools.py in wrapper(*args, **kw)
    801 
    802     def wrapper(*args, **kw):
--> 803         return dispatch(args[0].__class__)(*args, **kw)
    804 
    805     registry[object] = func

C:\Users\touleem\AppData\Local\Continuum\Anaconda3\lib\site-packages\rpy2\robjects\pandas2ri.py in py2ri_pandasdataframe(obj)
     58             od[name] = StrVector(values)
     59 
---> 60     return DataFrame(od)
     61 
     62 @py2ri.register(PandasIndex)

C:\Users\touleem\AppData\Local\Continuum\Anaconda3\lib\site-packages\rpy2\robjects\vectors.py in __init__(self, obj)
    956                                  " of type VECSXP")
    957 
--> 958             df = baseenv_ri.get("data.frame").rcall(tuple(kv), globalenv_ri)
    959             super(DataFrame, self).__init__(df)
    960 

RRuntimeError: Error: cannot allocate vector of size 254 Kb

请注意,在使用之前,我的RAM使用量已经爆炸(从5Go到16Go:O)。

为什么需要这么多内存?

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

  

为什么需要这么多内存?

不幸的是,我没有蚂蚁的想法。 Windows上并不支持rpy2(意味着本机,在Docker容器中正常工作)。

以下工作正常(意味着内存使用量少于您报告的内容):

url = "http://archive.ics.uci.edu/ml/machine-learning-databases/adult/adult.data"
from rpy2.robjects.packages import importr
utils = importr('utils')
dataf = utils.read_csv(url)