我一直试图在R循环中添加一个滞后,但一直没有太多的运气。我的数据的基本情况如下:
N1<-1
R1<-1
N1<-(R1-3)
R2<-R1*2 #note this is different from other Rx<-...
N2<-(R2-3)
R3<-(R2-R1)*2
N3<-(R3-3)
R4<-(R3-R2)*2
N4<-(R4-3)
R5<-(R4-R3)*2
N4<-(R4-3)
R5<-(R4-R3)*2
N4<-(R4-3)
R5<-(R4-R3)*2
etc.. to R10
print(R10)我可以像这样把它变成一个循环来简化它:
N1<-1
R1<-1
N1<-(R1-3)
R2<-R1*2
n<-N1
r<-R2
for(i in 1:8) n<-(r-3)
r<-(r-("r-1"))*2
print(r)然而," r -1“短语(概念上意味着r的前一次迭代,而不是字面上的r减去整数1)不起作用,因为r被循环的每次迭代覆盖。关于如何做到这一点的想法?到目前为止,我读到的Lag函数似乎需要一个数据帧,因为这是一个模型,我没有。我也不确定是否只有一些术语来表示"r-1",或者甚至滞后,我遗漏了它。任何帮助都将不胜感激
发布于 2020-07-02 19:05:34
这可能是你想要的吗:
n = 10
R <- c(1,2, rep(NA, times = n - 2))
for (i in 3:n) R[i] <- (R[i-1] + R[i-2]) * 2
R
[1] 1 2 6 16 44 120 328 896 2448 6688
N <- lag(R, 3)
[1] NA NA NA 1 2 6 16 44 120 328我认为这里的关键是要理解R中“没有标量”。基本上,一切都是一个向量。R[1]访问向量的第一个值,R[2]访问第二个值,依此类推。
发布于 2020-07-03 19:26:56
一位朋友帮我找到了这个对我来说最简单的解决方案:
N1<-1
R1<-1
N1<-(R1-3)
R2<-R1*2
n<-N1
r_prev<-R1
r_current<-R2
for(i in 1:8) n<-(r_current-3)
r_temp<-r_current
r_current<-(r_current-r_prev)*2
r_prev<-r_temp
print(r)对于像我这样的初学者来说,可能不是最整洁的,但更简单一点!
https://stackoverflow.com/questions/62694354
复制相似问题