python - rpy2代码可以并行运行吗?

标签 python r rpy2

我有一些 Python 代码通过 rpy2 将数据帧传递给 R,然后 R 对其进行处理,然后我通过 com.load_data 将生成的 data.frame 作为 PANDAS 数据帧拉回 R。

问题是,对 com.load_data 的调用在单个 Python 进程中运行良好,但当同一组代码在多个 multiprocessing.Process 中运行时它会崩溃并发处理。我从 Python 中得到以下错误消息:

File "C:\\Python27\\lib\\site-packages\\pandas\\rpy\\common.py", line 29, in load_data
    r.data(name) TypeError: 'DataFrame' object is not callable'

所以我的问题是,rpy2 实际上不是设计能够并行运行,还是它只是 load_data 函数中的一个错误?我只是假设每个 Python 进程都会获得自己独立的 R session 。据我所知,唯一的解决方法是让 R 将输出写入一个文本文件,适当的 Python 进程可以打开该文件并继续进行处理。但这非常笨重。

更新一些代码:

from rpy2.robjects.packages import importr
import rpy2.robjects as ro
import pandas as pd
import pandas.rpy.common as com

# Load C50 library into R environment
C50 = importr('C50')

...

# PANDAS data frame containing test dataset
testing = pd.DataFrame(testing)

# Pass testing dataset to R
rtesting = com.convert_to_r_dataframe(testing)
ro.globalenv['test'] = rtesting

# Strip "AsIs" from each column in the R data frame
# so that predict.C5.0 will work
for c in range(len(testing.columns)):
    ro.r('''class(test[,{0}])=class(test[,{0}])[-match("AsIs", class(test[,{0}]))]'''.format(c+1))

# Make predictions on test dataset (res is pre-existing C5.0 tree)
ro.r('''preds=predict.C5.0(res, newdata=test)''')
ro.r('''preds=as.data.frame(preds)''')

# Get the predictions from R
preds = com.load_data('preds') ### Crashes here when code is run on several processes concurrently

#Further processing as necessary
...

最佳答案

rpy 的工作原理是并行运行 Python 进程和 R 进程,并在它们之间交换信息。它没有考虑使用 multiprocess 并行调用 R 调用。所以实际上,每个 python 进程都连接到同一个 R 进程。这可能会导致您看到的问题。

避免此问题的一种方法是在 R 中实现并行处理,而不是在 Python 中。然后将所有内容立即发送到 R,这将并行处理它,结果将发送回 Python。

关于python - rpy2代码可以并行运行吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25175530/

相关文章:

python - 将 python 列表作为参数传递给 rpy2 中的 R 函数

python - 是否可以将 dash 数据表导出到磁盘上的特定位置或直接导出到 SQL Server?

python - 如何创建不调用任何函数的轨迹栏? OpenCV 3.1 与 Python 2.7

python - 查找另一列中两个条目之间的列的最小值

python - rpy2错误: "unrecognized escape in character string"

r - ipython notebook R cell magic作为python函数

python - 添加到购物车时 selenium 失败,如何单击 javascript 按钮?

r - 如何将数据框中的每一列拆分为两列?

r - Dataframe:列,检查每行前一行的值并输入值

r - 在 R 中将条件函数叠加在光栅砖上以生成单层