尝试在另一台计算机上使用 glm 模型进行预测时出错
Posted
技术标签:
【中文标题】尝试在另一台计算机上使用 glm 模型进行预测时出错【英文标题】:An error while trying to use glm model for prediction on another computer 【发布时间】:2015-02-17 08:44:55 【问题描述】:我想在一台 R 机器中保存一个 glm 对象,并将其用于预测位于另一台具有较新数据的机器上的另一个数据集。我尝试使用 save
和 load
但没有成功。我究竟做错了什么?
这是一个玩具示例:
# 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 模型进行预测时出错的主要内容,如果未能解决你的问题,请参考以下文章
连接到在另一台计算机上作为 Windows 服务运行的 WCF