我对我编写的代码有疑问,应该更新线性回归。
data<-rnorm(100,mean= 3,sd=1.8)
reg.cuve<-rep(0,length(data)-20)
x<-seq(1:20)
for(i in 20:length(data)){
reg<-lm(data[i-19:i]~x)
reg.curve[i]<-tail(fitted(reg),1)
}
错误必须在for循环中发生。我得到的错误信息是
Error in model.frame.default(formula = data[i - 19:i] ~ x, drop.unused.levels = TRUE) :
variable lengths differ (found for 'x')
然而,为固定的i运行所有命令,一切正常。原始数据是连续数百天的空气污染。谢谢你的帮助
答案 0 :(得分:1)
问题是[i-19:i]
,它没有按照你的想法做到
例如,当i = 20
时20-19:20
[1] 1 0
您需要的是[(i-19):i]
(20-19):20
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
答案 1 :(得分:1)
中的冒号
i-19:i
具有比减法更高的优先级,因此对于i = 20,您得到20-c(19,20)而不是(20-19):20,正如您所期望的那样。适当放置的括号解决了这个问题
data<-rnorm(100,mean= 3,sd=1.8)
reg.curve<-rep(0,length(data)-20)
x<-seq(1:20)
for(i in 20:length(data)){
reg<-lm(data[(i-19):i]~x)
reg.curve[i]<-tail(fitted(reg),1)
}