我正在尝试使用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
中的其他功能,但找不到可以执行该功能的功能。
答案 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)