基于R语言sapply生成的回归模型无法调用predict函数求助
解决R中sapply生成LM模型无法预测的问题
我来帮你搞定这个问题!你遇到的核心问题是**sapply的默认简化特性把你的lm模型对象给拆解了**,导致LM_10[[1]]并不是一个完整的lm类对象,自然没法用predict()正常调用。
问题原因
sapply()默认会自动简化输出结果:如果每个迭代返回的对象是类似列表的结构(比如lm模型),它会尝试把这些对象拆解成矩阵或向量,而不是保留原始的列表结构。这就导致你拿到的LM_10其实不是10个完整lm模型的列表,而是被拆分后的零散数据。
两种解决方案
方案1:用lapply()代替sapply()
lapply()的设计就是返回列表,不会自动简化结果,完美适配你的需求:
# 用lapply生成完整的lm模型列表 LM_10 <- lapply(1:10, function(i) lm(logprice~., data = traindata[[i]])) # 现在可以正常调用predict了 pr.LM <- predict(LM_10[[1]])
方案2:给sapply()加上simplify = FALSE参数
如果你习惯用sapply(),只需要关闭它的简化特性即可:
# 关闭sapply的自动简化,强制返回列表 LM_10 <- sapply(1:10, function(i) lm(logprice~., data = traindata[[i]]), simplify = FALSE) # 同样可以正常预测 pr.LM <- predict(LM_10[[1]])
验证方法
你可以用class()函数检查模型对象的类型,确认它是lm类:
class(LM_10[[1]]) # 输出应该是 "lm"
这样处理后,每个LM_10[[i]]都是完整的线性回归模型对象,包含predict()需要的所有信息(比如模型系数、变量名、训练数据结构等),就能正常生成预测结果啦。
内容的提问来源于stack exchange,提问作者Kyle
相关产品推荐
相关产品推荐

