2015-02-27 3 views
0

Я пытаюсь объединить несколько случайных моделей леса с помощью rpy2. combine команда в R выглядит довольно прямо вперед, но я не знаю, как передать радиочастотные объекты из питона в R.Передача списка объектов randomForest обратно в R с помощью rpy2

Простой пример:

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 RF модели R

RFall = r.combine(RF) 

Возвращает ошибку:

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

у меня есть посмотрел на другие функции в robjects, но не смог найти тот, который сделает это.

ответ

1

Сообщение об ошибке отправляется из R, там список, который ожидается, является списком R.

Попробуйте использовать:

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

редактирования: конструктор ListVector хочет имена для элементов списка

** 2 редактирования: ** Однако, реальный путь к решению является заметить что вы не вызывали combine() правильно, и сообщение об ошибке, возвращаемое при вызове combine(), довольно вводит в заблуждение. Что вы хотите (ed):

RFall = r.combine(*RF) 
+0

Извините @Igautier, я думал, что это работает. Но я только что попробовал это снова и получаю ошибку ValueError: слишком много значений для распаковки – kungphil

+0

Я могу что-то пропустить, но это должно сработать. Можете ли вы убедиться, что пример кода в вопросе можно воспроизвести? – lgautier

+0

Пример кода @Igautier воспроизводит ошибку, я пробовал это на нескольких разных установках Python – kungphil

Смежные вопросы