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

Passing a list of randomForest objects back to R with 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)

当我尝试 combine R 中的 RF 模型时

RFall = r.combine(RF)

Returns错误:

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

我查看了 robjects 中的其他函数,但找不到合适的函数。

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

尝试使用:

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

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

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

RFall = r.combine(*RF)