使用" stackloss"在R中的数据,我创建了一个回归模型,如下所示:
stackloss.lm = lm(stack.loss ~ Air.Flow + Water.Temp + Acid.Conc.,data=stackloss)
stackloss.lm
newdata = data.frame(Air.Flow=stackloss$Air.Flow, Water.Temp= stackloss$Water.Temp, Acid.Conc.=stackloss$Acid.Conc.)
假设我获得了一个新的数据集并且需要预测它的" stack.loss"基于以前的模型,如下所示:
#suppose I need to used my model on a new set of data
stackloss$predict1[-1] <- predict(stackloss.lm, newdata)
我收到此错误:
Error in `$<-.data.frame`(`*tmp*`, "predict1", value = numeric(0)) :
replacement has 0 rows, data has 21
他们是否可以在具有相同列但不同行的不同数据集上使用预测函数?
提前致谢。
答案 0 :(得分:1)
您可以预测任意长度的新数据集,只需确保将结果分配给适当大小的现有向量。
此行导致问题,因为
stackloss$predict1[-1] <- predict(stackloss.lm, newdata)
因为您无法同时为不存在的向量分配和子集。这也不起作用
dd <- data.frame(a=1:3)
dd$b[-1]<-1:2
用于拟合模型的stackloss
的长度将始终保持相同的长度,因此重新为该数据分配新值。框架没有意义。如果您想使用较小的数据集进行预测,那很好
stackloss.lm = lm(stack.loss ~ Air.Flow + Water.Temp + Acid.Conc.,data=stackloss)
newdata = head(data.frame(Air.Flow=stackloss$Air.Flow, Water.Temp= stackloss$Water.Temp, Acid.Conc.=stackloss$Acid.Conc.),5)
predict(stackloss.lm, newdata)
1 2 3 4 5
38.76536 38.91749 32.44447 22.30223 19.71165
由于结果具有与newdata
具有行(n = 5)相同数量的值,因此将这些值附加到newdata
是有意义的。附加到stackloss
是没有意义的,因为它有不同的行数(n = 21)
newdata$predcit1 <- predict(stackloss.lm, newdata)