我已经阅读了有关命名变量的其他帖子,并尝试实现答案,但仍然为我的新数据获取了太多的值,我希望运行现有模型。这是工作示例代码:
set.seed(123)
mydata <- data.frame("y"=rnorm(100,mean=0, sd = 1),"x"=c(1:100))
mylm <- lm(y ~ x, data=mydata)
# ok so mylm is a model on 100 points - lets look at it and the data
par(mfrow=c(2,2))
plot(mylm)
par(mfrow=c(1,1))
predvals <- predict(mylm, data=mydata)
plot(mydata$x,mydata$y)
lines(predvals)
这里没有惊喜 - 生成点的直线 - 长度为100个观测值。现在我生成20个具有完全相同名称的新数据,当我通过predict()运行新数据时,我希望得到20分,而我得到100.我错过了什么!让我疯狂......
newdata <- data.frame("y"=rnorm(20,mean=0, sd = 1), "x"=c(1:20))
predvals <- predict(mylm, data=newdata)
length(newdata$y)
length(predvals)
# quick -not elegant - way to look at it:
plot(predvals)
lines(newdata$x,newdata$y)
我是否需要告诉predict()只使用20分或类似的东西?
答案 0 :(得分:4)
您的问题出在predvals <- predict(mylm, data=newdata)
。
正确的电话是predict(mylm, newdata=newdata)
。 R中的predict()
函数采用命名参数newdata
,而非data
。