我试图从python中调用R编码的随机森林预测方法。使用rpy2实现相同。
我的要求是为每一行(代表一个会话)实时调用预测方法,并在python中获取预测输出以标记该会话。
我已经获得了训练有素的模型并加载到了R.创建了一个数据框并调用了预测方法。
收到一个错误。
这是python代码的片段。
from rpy2.robjects import pandas2ri
import rpy2.robjects as ro
pandas2ri.activate()
ro.r('require(xlsx)')
ro.r('require(caret)')
ro.r('require(rpart)')
ro.r('require(e1071)')
ro.r('library(randomForest)')
ro.r('library(stringr)')
ro.r('library(plyr)')
ro.r('library(sqldf)')
ro.r('library(splitstackshape)')
ro.r('library(cluster)')
ro.r('library(fpc)')
ro.r('fit <-readRDS("RFmodel.rds")')
dataRec = ro.DataFrame({ "protocoldesc":protocoldesc ,"serverflag":serverflag ,....})
#Assign it to name test in R
ro.globalenv['test'] = dataRec;
ro.r('predboom<-predict(fit, test, type="response")')
##creating a column for the pred
ro.r('test$pred <- predboom')
ro.r('content_type <-as.char(test$pred)')
print(ro.r('content_type'))
获得以下错误
Traceback (most recent call last):
File "TestAnalytics.py", line 717, in <module>
ro.r('predboom<-predict(fit, test, type="response")')
File "/usr/lib64/python2.7/site-packages/rpy2/robjects/__init__.py", line 359, in __call__
res = self.eval(p)
File "/usr/lib64/python2.7/site-packages/rpy2/robjects/functions.py", line 178, in __call__
return super(SignatureTranslatedFunction, self).__call__(*args, **kwargs)
File "/usr/lib64/python2.7/site-packages/rpy2/robjects/functions.py", line 106, in __call__
res = super(Function, self).__call__(*new_args, **new_kwargs)
rpy2.rinterface.RRuntimeError: Error in eval(expr, envir, enclos) : object 'skew1' not found
不知道这个skew1对象是什么以及如何修复它。