python - 使用 rpy2 从 python 调用 R 库 "randomForest"

标签 python r rpy2

我想使用 rpy2 在我的 python 脚本中嵌入一些 R 库。我已经成功嵌入“stats.lm”,但现在我想嵌入“randomForest”。

import pandas as pd
from rpy2.robjects.packages import importr
from rpy2.robjects import r, pandas2ri
import rpy2.robjects as robjects

randomForest=importr('randomForest')

pandas2ri.activate()

#read data
df = pd.read_csv('train.csv',index_col=0)
rdf = pandas2ri.py2ri(df)

#check
print(type(rdf))
print(rdf)

#Random Forest
formula = 'target ~ .'
fit_full = randomForest(formula, data=rdf)

输出为:

Traceback (most recent call last):

  File "<ipython-input-5-776f4072f19e>", line 2, in <module>
    fit_full = randomForest(formula, data=rdf)

TypeError: 'InstalledSTPackage' object is not callable

我已经在 R 中成功使用这个包来建模这个数据集。 “train.csv”是一个由约数万个样本(行)和约 94 列组成的矩阵:93 个特征(类整数),1 个目标(类因子)。目标列有 9 个类(Class_1、...、Class_9)。

-----------------编辑-----------------

部分解决方案可能是将代码直接嵌入到包含模型和预测的函数中:

import rpy2.robjects as robjects
import rpy2
from rpy2.robjects import pandas2ri

rpy2.__version__

robjects.r('''
           f <- function() {

                    library(randomForest)

                    train <- read.csv("train.csv")
                    train1 <- train[sample(c(1:60000), 5000, replace = TRUE),2:95]

                    train1.rf <- randomForest(target ~ ., data = train1,
                                          importance = TRUE,
                                           do.trace = 100)

                    pred <- as.data.frame(predict(train1.rf, train1[1:100,1:93]))

            }
            ''')

r_f = robjects.globalenv['f']
pred=pandas2ri.ri2py(r_f())

但我仍然想知道是否有更好的解决方案(也存储模型“train1.rf”)。

最佳答案

这就是我正在寻找的内容:

import rpy2.robjects as robjects
from rpy2.robjects import pandas2ri
import pandas as pd
import random

pandas2ri.activate()

df = pd.read_csv('train.csv',index_col=0)



train=df.iloc[random.sample(range(1,60000), 5000),0:94]
test=df.iloc[random.sample(range(1,60000), 100),0:93]


rtrain = pandas2ri.py2ri(train)
print(rtrain)
rtest = pandas2ri.py2ri(test)
print(rtest)


robjects.r('''
           f <- function(train) {

                    library(randomForest)
                    train1.rf <- randomForest(target ~ ., data = train, importance = TRUE, do.trace = 100)

            }
            ''')
r_f = robjects.globalenv['f']
rf_model=(r_f(rtrain))


robjects.r('''
           g <- function(model,test) {

                    pred <- as.data.frame(predict(model, test))

            }
            ''')

r_g = robjects.globalenv['g']
pred=pandas2ri.ri2py(r_g(rf_model,rtest))

关于python - 使用 rpy2 从 python 调用 R 库 "randomForest",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45325274/

相关文章:

Python:选择一个元素而不用替换

python - wxPython wx.CallAfter - 如何让它立即执行?

Python Tkinter - 属性错误 : 'str' object has no attribute 'read'

r - 暂时停止 R 记录历史

python - 将列添加到 rpy2 中的 DataFrame

python - 在 Anaconda Jupyter Notebook (MAC OSX) 中加载 rpy2 时出现导入错误

python - Python 中的双重求和

r - 如何在 R 中删除具有模式的行?

python - 自动 PostgreSQL CREATE TABLE 和从 CSV 或 Pandas DataFrame 插入

python - 使用 rpy2 更改 ggplot2 中的图例