在R中使用已保存的tslm模型预测时遇错误求助
解决加载tslm模型后预测出错的问题
这个错误的核心原因是你对load()函数的用法理解有点偏差——它不会返回加载的模型对象,而是把保存的对象直接恢复到当前R环境中,返回的只是加载对象的名称(字符串)。所以你的model2其实是个字符串"model",而不是真正的tslm模型,forecast()自然无法识别,才会抛出奇怪的错误。
下面给你两种正确的解决方案:
方案一:正确使用load()函数
保存模型的步骤没问题,加载时不需要赋值,直接调用load(),然后用原来的模型名称(或者重新赋值)进行预测:
# 保存模型(注意规范参数是file,R也兼容filename) model <- tslm(y ~ x) save(model, file = "tslm.Rda") # 加载模型:直接调用load,模型会回到当前环境中 load("tslm.Rda") # 直接用原模型名预测,或者赋值给新变量再预测 forecast(model, newdata = data) # 或者改名后使用 model2 <- model forecast(model2, newdata = data)
方案二:用saveRDS()和readRDS()更灵活
如果你希望加载时直接赋值给新变量名,推荐用saveRDS()和readRDS()——这组函数专门用来保存/读取单个R对象,加载时可以直接赋值,避免环境中对象名的混乱:
# 保存模型 model <- tslm(y ~ x) saveRDS(model, file = "tslm.rds") # 加载模型并直接赋值给model2 model2 <- readRDS("tslm.rds") # 正常执行预测 forecast(model2, newdata = data)
验证示例
用内置时间序列数据测试一下,确保流程没问题:
library(forecast) # 构造测试数据 y <- AirPassengers x <- time(AirPassengers) # 训练tslm模型 model <- tslm(y ~ x) # 保存并加载(用saveRDS示例) saveRDS(model, file = "test_tslm.rds") model_loaded <- readRDS("test_tslm.rds") # 构造新的预测数据 new_data <- data.frame(x = c(1961, 1962)) # 执行预测 forecast(model_loaded, newdata = new_data)
运行这段代码会正常输出预测结果,不会再出现之前的错误。
内容的提问来源于stack exchange,提问作者Z. Shah
相关产品推荐
相关产品推荐

