我有这个
R
代码:
library(mongolite)
myUnserializationFunc<-function(value){
return (unserialize(value,refhook = function(chr) list(dummy = 0L)))
}
url_path = sprintf("mongodb+srv://%s:%s@%s", "someuser", "somepass", "somehost.in.mongodbatlas")
modelCollection<-mongo(collection = "somecollection"
,url = paste0(url_path,"/","somedatabase"))
modelName<-"modle32"
strConditions=paste0('{"modelName":"',modelName,'"}')
strSelect=paste0('{"object":true,"_id":false}')
mdl<-modelCollection$find(query=strConditions,fields=strSelect)
mdl<-myUnserializationFunc(mdl[[1]][[1]])
predict(mdl,iris)
当我在 Windows 本地计算机中从 RStudio 执行它时,它正在工作:
> predict(mdl,iris)
Using 100 trees...
[1] 5.066186 4.766941 4.795193 4.910053 5.139620 5.554888 4.922106 4.967152 4.734696
[10] 4.910053 5.230387 4.967152 4.766941 4.766941 5.139620 5.408491 5.317723 5.111907
[19] 5.422505 5.276108 5.113549 5.408491 5.139620 5.210461 5.113549 4.857708 5.145256
[28] 5.156954 4.876385 4.885961 4.910053 5.145256 5.230387 5.139620 4.910053 4.795193
[37] 5.066186 5.139620 4.766941 4.967152 5.111907 4.651098 4.795193 5.335057 5.554888
但是,当我从远程 CentOS 服务器执行完全相同的脚本时,出现此错误:
> stats::predict(mdl,iris)
Error in UseMethod("predict") :
no applicable method for 'predict' applied to an object of class "gbm"
我也尝试了随机森林,但遇到了同样的错误。
我做错了什么?
解决缺失函数所需的步骤从函数名称开始。在这种情况下,您(或其他人)显然将“gbm”类的完整模型对象放入数据库中,然后将其提取到机器和会话中,其中模型构建功能未加载到工作区中。在
predict.gbm
上运行谷歌搜索会出现第一个点击:https://www.rdocumentation.org/packages/gbm/versions/2.1.8.1/topics/predict.gbm。因此,要尝试的第一件事(显然对您来说成功了)是在对该类的对象调用 library(gbm)
之前运行 predict
。将来您可能会考虑使用包含对象类的字符串来命名模型。