尝试在另一台计算机上使用 glm 模型进行预测时出错

Posted

技术标签:

【中文标题】尝试在另一台计算机上使用 glm 模型进行预测时出错【英文标题】:An error while trying to use glm model for prediction on another computer 【发布时间】:2015-02-17 08:44:55 【问题描述】:

我想在一台 R 机器中保存一个 glm 对象,并将其用于预测位于另一台具有较新数据的机器上的另一个数据集。我尝试使用 saveload 但没有成功。我究竟做错了什么? 这是一个玩具示例:

# on machine 1:
glm<-glm(y~x1+x2,data=dat1, family=binomial(link="logit")
save(glm,file="glm.Rdata") # the file is stored in a folder.

# on machine 2:
load(glm.RData) # got an error:"Error in load(glm.RData) : object 'glm.RData' not found"
#I tried :
 load(file='glm.RData') # no error was displayed
  print(glm) # got an error:"Error in load(glm.RData) : object 'glm.RData' not found"

任何帮助都会很棒。

【问题讨论】:

您在正确的工作区吗?您可以使用load(file.choose()) 导航到正确的文件。 你可能想看看?getwd?setwd 我关注了@Pascal cmets,我看到glm文件的大小是0.5GB。不应该是只包含公式的小fie吗? str(glm) 将让您一睹里面存储的内容。我会避免 glm 作为名称,因为它是函数本身。 我加载了文件,它工作正常!谢谢你的帮助。但是我真的不明白是否有办法只保存模型的论坛而不是整个数据集? 【参考方案1】:

根据@user3710546 的建议,我会避免使用名称glm 保存您的模型,因为它会屏蔽(即阻止)glm() 函数,使您难以在会话中使用它。

使用save()load()

save() 通常用于将对象的列表 保存到文件中,而不是单个对象。 save() 的第一个参数是 list,“包含要保存的对象的名称 的字符向量。” (强调我的。)所以你想这样使用它:

# On machine 1:
save(list = 'glm', file = '/path/to/glm.RData')

# On machine 2:
load(file = '/path/to/glm.RData')

请注意,文件扩展名通常区分大小写:您保存到扩展名为 .RData 的文件中,但从扩展名为 .Rdata 的文件加载,这是不同的。这可以解释为什么找不到文件。

使用saveRDS()readRDS()

使用save()load 的另一种方法是使用saveRDS()readRDS(),它们被设计用于一个对象。它们的用法略有不同:

# On machine 1
saveRDS(glm, file = '/path/to/glm.rds')

# On machine 2
glm = readRDS(file = '/path/to/glm.rds')

注意.rds 文件扩展名以及readRDS() 不会自动放入环境中的事实(它需要分配给某些东西)。

保存部分 GLM

如果您只想保存公式(即实际文本字符串),您可以在glm$formula 中找到它,其中glm 是您的对象名称。它以formula 对象的形式返回,但您可以使用as.character(glm$formula) 将其转换为字符串,然后写入文本文件或其他文件。

但是,如果您希望模型本身 没有创建它的数据集(以减少磁盘空间),请查看 this article,其中讨论了 @ 的哪些部分987654349@对象可以安全删除。

【讨论】:

以上是关于尝试在另一台计算机上使用 glm 模型进行预测时出错的主要内容,如果未能解决你的问题,请参考以下文章

已发布的 qt .exe 不会在另一台计算机上打开

连接到在另一台计算机上作为 Windows 服务运行的 WCF

从另一个网络上的另一台计算机访问 db 时出现错误 #1045

如何在另一台计算机上运行 xcode c++ 程序?

OpenCV 程序无法在另一台计算机上运行

我可以在 xampp (localhost) 中运行我的项目,但是即使在配置后尝试在另一台计算机上运行时我也无法运行