创建R循环

创建R循环,r,loops,R,Loops,我试图创建一个R循环来帮助我获得Var2、Var3和Var4(参见下面的输出)。 Var1、Var5是预先输入的。 Var4是预先输入的 Var2 = lag(Var4) * Var5 Var3 = Var2 + lag(Var3) Var4 = Var1 - Var3 有什么建议吗 首先,我用初始值预先填充表格: df <- data.frame(row = 1:5, Var1 = rep(500, 5), V

我试图创建一个R循环来帮助我获得Var2、Var3和Var4(参见下面的输出)。 Var1、Var5是预先输入的。 Var4是预先输入的

 Var2 = lag(Var4) * Var5
 Var3 = Var2 + lag(Var3)
 Var4 = Var1 - Var3
有什么建议吗


首先,我用初始值预先填充表格:

df <- data.frame(row = 1:5, 
                 Var1 = rep(500, 5),
                 Var2 = c(0, rep(NA_real_, 4)),
                 Var3 = c(0, rep(NA_real_, 4)),
                 Var4 = c(500, rep(NA_real_, 4)),
                 Var5 = 0.1)
一个基本的解决方案

我们使用起始值预先分配
df

df <- data.frame(
    Var1 = rep(500, 5),
    Var2 = 0,
    Var3 = 0,
    Var4 = 500,
    Var5 = rep(0.1, 5)
)
然后,我们可以在一个
for
循环中替换
df
中的值

for (i in 2:nrow(df)) {
    df$Var4[i] = df$Var1[i] - df$Var4[i-1] * df$Var5[i] - df$Var3[i-1]
    df$Var3[i] = df$Var4[i-1] * df$Var5[i] + df$Var3[i-1]
    df$Var2[i] = df$Var4[i-1] * df$Var5[i]
}
df
#  Var1  Var2   Var3   Var4 Var5
#1  500  0.00   0.00 500.00  0.1
#2  500 50.00  50.00 450.00  0.1
#3  500 45.00  95.00 405.00  0.1
#4  500 40.50 135.50 364.50  0.1
#5  500 36.45 171.95 328.05  0.1

多少次?只有五次?一直到Var4的长度
Var2
的值似乎与
lag(Var4)*Var5
不一致。你能再检查一下吗?此外,
Var3
值由递归关系给出。在这种情况下,您需要一个起始值。起始值是多少?您声明要计算
Var4
的值,但随后提到
Var4
是“预输入的”。那么是哪一个呢?@ali.hash2这仍然不起作用。500作为
Var3
的起始值不会给出屏幕截图中的
Var3
值。另外,您还没有对
Var4
进行说明。
Var4
是给定的(“预先输入”)还是您正在尝试计算
Var4
?对于后者,您有一个循环条件,因为
Var2
依赖于
Var4
Var2
依赖于
Var3
,而
Var3
又依赖于
Var4
。如果您回顾一下如何提供。您的数据截图不是一个好主意,因为它(1)要求我们手动转录您的数据,(2)不清楚您希望根据哪些其他数量/列生成哪些数量/列(什么是输入,什么是输出?)。
df <- data.frame(
    Var1 = rep(500, 5),
    Var2 = 0,
    Var3 = 0,
    Var4 = 500,
    Var5 = rep(0.1, 5)
)
Var4[i] = Var1[i] - Var4[i-1] * Var5[i] - Var3[i-1]
Var3[i] = Var4[i-1] * Var5[i] + Var3[i-1]
Var2[i] = Var4[i-1] * Var5[i]
for (i in 2:nrow(df)) {
    df$Var4[i] = df$Var1[i] - df$Var4[i-1] * df$Var5[i] - df$Var3[i-1]
    df$Var3[i] = df$Var4[i-1] * df$Var5[i] + df$Var3[i-1]
    df$Var2[i] = df$Var4[i-1] * df$Var5[i]
}
df
#  Var1  Var2   Var3   Var4 Var5
#1  500  0.00   0.00 500.00  0.1
#2  500 50.00  50.00 450.00  0.1
#3  500 45.00  95.00 405.00  0.1
#4  500 40.50 135.50 364.50  0.1
#5  500 36.45 171.95 328.05  0.1