我正在尝试在我的电脑上设置rpy2。
我的配置:
Python包:
我要做的第一件事就是加载我的数据集(来自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)。
为什么需要这么多内存?
感谢您的帮助
答案 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)