使用rpy2将randomForest对象列表传递回R.

时间:2015-02-27 11:04:50

标签: python r random-forest rpy2

我正在尝试使用rpy2组合一些随机森林模型。 R中的combine命令看起来相当直接,但我不确定如何将RF对象从python传递给R.

简单示例:

import pandas as pd
import numpy as np
import sys
if sys.version_info[0] < 3:
    from string import lowercase
else:
    from string import ascii_lowercase as lowercase
import rpy2.robjects as robjects
from rpy2.robjects import pandas2ri
pandas2ri.activate()
r = robjects.r

r.library("randomForest")

df = pd.DataFrame(data=np.random.random(size=(100, 10)), columns=[a for a in lowercase[:10]])
cols = df.columns
RF = []

for _ in range(5):
    df['train'] = np.random.random(size=100) < .75
    rf = r.randomForest(robjects.Formula('a~.'), data=df[df.train][cols])
    RF.append(rf)

当我在R

中尝试和combine RF模型时
RFall = r.combine(RF)

返回错误:

Error in (function (...)  : 
  Argument must be a list of randomForest objects

我查看了robjects中的其他功能,但找不到可以执行该功能的功能。

1 个答案:

答案 0 :(得分:1)

错误消息来自R,预期列表是R列表。

尝试使用:

RFl = robjects.vectors.ListVector([('X%i' % i, x) for i, x in enumerate(RF)])

编辑:ListVector的构造函数需要列表元素的名称

**第二次编辑:**但是,解决方案的真正途径是注意到您没有正确调用combine()并且在调用combine()时返回的错误消息非常具有误导性。你想要的(编辑)是

RFall = r.combine(*RF)