如何将 R 模型存储为文本?

     2023-05-07     204

关键词:

【中文标题】如何将 R 模型存储为文本?【英文标题】:How to store an R model as text? 【发布时间】:2014-02-25 08:36:28 【问题描述】:

找到了一个类似的问题here,但是不全。

我的问题分为两部分:

    我想将 R lm() 对象的“精简”版本作为文本存储在 DBMS 中。 我希望能够从我保存的文本对象中生成预测。

我所说的“苗条”是指预测()函数不会失败的数据量恰到好处。我想存储模型,因为学习有时需要很多时间,例如:

lmFull <- lm(Volume~Girth+Height,data=trees)
lmSlim <- lmFull
lmSlim$fitted.values <- lmSlim$qr$qr <- lmSlim$residuals <- lmSlim$model <- lmSlim$effects <- NULL
pred1 <- predict(lmFull,newdata=data.frame(Girth=c(1,2,3),Height=c(2,3,4)))
pred2 <- predict(lmSlim,newdata=data.frame(Girth=c(1,2,3),Height=c(2,3,4)))
identical(pred1,pred2)
[1] True

我将 lmSlim 对象存储为文本并对其进行解析:

lmTxt <- deparse(lmSlim)
lmTxt <- paste0(lmTxt,collapse="")

将其存储在数据库中很容易,但是当我想再次重用它时:

lmRst <- eval(parse(text=lmTxt))
class(lmRst)
[1] "lm"
predict(lmRst,newdata=data.frame(Girth=c(1,2,3),Height=c(2,3,4)))
Error in eval(expr, envir, enclos) : object 'Volume' not found

有什么建议吗?

【问题讨论】:

【参考方案1】:

我已经解决了这个问题,可能是一个解决方法,但它有效:

# learning and reducing the size of output
lmFull <- lm(Volume~Girth+Height,data=trees)
lmSlim <- lmFull
lmSlim$fitted.values <- lmSlim$qr$qr <- lmSlim$residuals <- lmSlim$model <- lmSlim$effects <- NULL
pred1 <- predict(lmFull,newdata=data.frame(Girth=c(1,2,3),Height=c(2,3,4)))
pred2 <- predict(lmSlim,newdata=data.frame(Girth=c(1,2,3),Height=c(2,3,4)))
identical(pred1,pred2)
[1] TRUE

# deparse and collapse into a string
lmTxt <- deparse(lmSlim)
lmTxt <- paste0(lmTxt,collapse="")

# re-parsing
lmParsed <- eval(parse(text=lmTxt))
lmParsed$call <- lmFull$call
lmParsed$terms <- lmFull$terms
lmParsed
pred3 <- predict(lmParsed,newdata=data.frame(Girth=c(1,2,3),Height=c(2,3,4)))
identical(pred1,pred3)
[1] FALSE

但是……

sum(abs(pred1 - pred3))
[1] 1.634248e-13
as.numeric(object.size(lmParsed) / object.size(lmFull))
[1] 0.3449477

所以我可以忍受它。

【讨论】:

【参考方案2】:

不要将其存储为文本。试试这个:

lmFull <- lm(Volume~Girth+Height,data=trees)
lmSlim <- lmFull
lmSlim$residuals <- NULL
lmSlim$effects <- NULL
lmSlim$fitted.values <- NULL
lmSlim$model <- NULL
lmSlim$qr$qr <- NULL
predict(lmSlim)
#works
predict(lmSlim, newdata=data.frame(Girth=30, Height=20))
#works

object.size(lmFull)
#22960 bytes
object.size(lmSlim)
#7920 bytes

【讨论】:

请仔细阅读问题,我需要在数据库中存储为文本。我知道如何将对象分配给变量,这不是问题。我需要一种编写“一些文本”的方法,当我解析它时,它将是我可以预测的模型的精简版本。 嗯,原则上,对于预测,您只需要系数和模型公式。因此,您可以编写自己的 predict 函数。 感谢@Roland,我同意,但我编写自己的预测函数不会适用于其他类型的拟合函数,2 永远不会像 R 内置函数那样高效。你不同意吗?【参考方案3】:

试试这个:

lmTxt <- dput(lmSlim)
lmRst <- eval(lmTxt)
predict(lmRst,newdata=data.frame(Girth=c(1,2,3),Height=c(2,3,4)))

编辑:正如 cmets 中所指出的,dput 不返回字符串。所以这里有另一种选择:

save(lmSlim, file='data.txt', ascii=T)

文件的内容是ascii,因此应该可以将它们写入数据库。要稍后重新加载,只需使用load 命令:

load('data.txt')

【讨论】:

谢谢。但是, dput() 与它获得的对象具有相同的类。我需要将它保存为字符。 对,对不起!我用另一个选项编辑了答案,请参见上文。 dput 确实产生了 lm 对象的文本表示。使用 tmpfile

如何将多维下标存储为R中的变量

】如何将多维下标存储为R中的变量【英文标题】:HowtostoremultidimensionalsubscriptasvariableinR【发布时间】:2018-03-0504:57:48【问题描述】:假设我有一个矩阵,mat<-matrix((1:9)^2,3,3)我可以像这样对矩阵进行切片>mat[2:3,2][1]2536如何将... 查看详情

如何强制 Text::CSV 将数字存储为文本?

】如何强制Text::CSV将数字存储为文本?【英文标题】:HowtoforceText::CSVtostorenumberastext?【发布时间】:2021-06-1410:10:55【问题描述】:我正在编写一些perl代码,使用Text::CSV模块从数据库中的记录创建一个.csv文件。有时,我的表中的... 查看详情

如何将十六进制字符串转换为R中的文本?

】如何将十六进制字符串转换为R中的文本?【英文标题】:HowtoconvertahexstringtotextinR?【发布时间】:2015-05-2821:41:11【问题描述】:是否有一个函数可以将十六进制字符串转换为R中的文本?例如:我有十六进制字符串1271763355662E324... 查看详情

如何将 r ggplot 图存储为 html 代码片段

】如何将rggplot图存储为html代码片段【英文标题】:Howtostorerggplotgraphashtmlcodesnippet【发布时间】:2021-12-1708:31:39【问题描述】:我正在通过使用ggplotly()和htmltools函数(如h3()和html())创建各种对象来创建一个html文档。然后我将它... 查看详情

如何将有向无环图 (DAG) 存储为 JSON?

】如何将有向无环图(DAG)存储为JSON?【英文标题】:HowdoyoustoreaDirectedAcyclicGraph(DAG)asJSON?【发布时间】:2012-04-1111:33:03【问题描述】:我想将DAG表示为JSON文本,并想知道是否有人尝试过这个以及他们在验证JSON是否实际上是DAG时遇... 查看详情

如何使用 Python 或 R 将 Excel 中带有替代文本的图形导出为 PDF?

】如何使用Python或R将Excel中带有替代文本的图形导出为PDF?【英文标题】:HowtoexportagraphwithalternativetextinExceltoPDFusingPythonorR?【发布时间】:2019-12-2504:03:32【问题描述】:我使用VBA在Excel中生成了大约500个图表,我需要将它们导出... 查看详情

如何创建更新查询以将存储为文本的 xml 值提取到新列中

】如何创建更新查询以将存储为文本的xml值提取到新列中【英文标题】:Howtocreateanupdatequerytoextractxmlvaluesstoredastextintonewcolumns【发布时间】:2019-09-0908:50:46【问题描述】:我有一个将XML存储在文本列中的现有表,因为不再需要这... 查看详情

如何使用 swiftui 将文本字段存储到核心数据中

】如何使用swiftui将文本字段存储到核心数据中【英文标题】:Howtostoretextfieldintocoredatawithswiftui【发布时间】:2020-01-0615:57:03【问题描述】:当输入TextField时,我无法完成将值与核心数据一起存储,并在进入视图时再次显示的任... 查看详情

如何将 if-then 语句与某些文本分类器合并以构建将句子分类为不同类的模型?

】如何将if-then语句与某些文本分类器合并以构建将句子分类为不同类的模型?【英文标题】:HowcanImergeif-thenstatementwithsometextclassifiertobuildsuchamodelthatclassifiesasentencesintodifferentclasses?【发布时间】:2015-12-0602:39:03【问题描述】:我... 查看详情

如何在 R 中为模型构建一个大的正则公式?

】如何在R中为模型构建一个大的正则公式?【英文标题】:HowtoconstructabigregularformulaforamodelinR?【发布时间】:2013-06-2509:23:38【问题描述】:我正在尝试创建模型以从包含预测变量x1到x100和其他200个变量的数据“D”预测“y”。因... 查看详情

如何将存储在 HDFS 中包含行的文本文件转换为 Pyspark 中的数据框?

】如何将存储在HDFS中包含行的文本文件转换为Pyspark中的数据框?【英文标题】:HowcanIconvertatextfilestoredinHDFScontainingRowsintoaDataframeinPyspark?【发布时间】:2017-11-0712:40:37【问题描述】:我正在使用Pyspark,最近将数据帧作为文本文... 查看详情

Python df.to_excel() 将数字作为文本存储在 excel 中。如何存储为价值?

】Pythondf.to_excel()将数字作为文本存储在excel中。如何存储为价值?【英文标题】:Pythondf.to_excel()storingnumbersastextinexcel.HowtostoreasValue?【发布时间】:2017-04-2603:31:43【问题描述】:我正在通过pd.read_html从google财务中抓取表格数据,... 查看详情

如何将 NSMutableString 转换为 double 以存储在 Core Data 中?

】如何将NSMutableString转换为double以存储在CoreData中?【英文标题】:HowdoIconvertNSMutableStringtodoubleforstoringinCoreData?【发布时间】:2010-02-2400:22:01【问题描述】:我的应用需要将从XML解析的纬度和经度值存储到核心数据中。目前,我... 查看详情

如何将 HTML 转换为纯文本 [重复]

】如何将HTML转换为纯文本[重复]【英文标题】:HowtoconvertHTMLtoplaintext[duplicate]【发布时间】:2014-09-2409:18:19【问题描述】:我尝试使用以下函数将html转换为纯文本,但在转换时仍然出错。privatestaticstringHtmlToPlainText(stringhtml)conststr... 查看详情

如何将逻辑回归和kmeans pmml文件导入r

】如何将逻辑回归和kmeanspmml文件导入r【英文标题】:howtoimportlogisticregressionandkmeanspmmlfilesintor【发布时间】:2017-03-2418:15:21【问题描述】:我正在寻找一些关于将pmml模型文件导入r的指导。PMML是一种预测模型标记语言,它允许在... 查看详情

如何将 .wav 音频文件转换为文本并使用 LUIS 识别意图

】如何将.wav音频文件转换为文本并使用LUIS识别意图【英文标题】:Howtoconvertthe.wavaudiofilesintotextandidentifytheintentsusingLUIS【发布时间】:2016-12-1709:04:15【问题描述】:我正在使用机器人技术,在我当前的项目中,我实现了Skype通话... 查看详情

如何将 QComboBox 中的文本存储在全局变量中

】如何将QComboBox中的文本存储在全局变量中【英文标题】:HowtostoretextfromQComboBoxinaglobalvariable【发布时间】:2019-09-1923:54:49【问题描述】:我有以下代码,在通过***上的答案筛选后,我无法将它们调整为我的(非常简单的)代码... 查看详情

如何调整我的模型以将上传的图像存储到我的数据库作为图像的链接而不是显示为 blob?

】如何调整我的模型以将上传的图像存储到我的数据库作为图像的链接而不是显示为blob?【英文标题】:Howdoiadjustmymodeltostoreduploadedimagestomydatabaseasalinktotheimageinsteadofappearingasablob?【发布时间】:2012-11-1207:36:56【问题描述】:大... 查看详情