gpt4 book ai didi

引用计算中的前一行

转载 作者:行者123 更新时间:2023-12-04 07:35:24 26 4
gpt4 key购买 nike

我是 R 新手,似乎无法掌握如何调用“self”的先前值,在本例中为先前的“b”b[-1] .

b <- ( ( 1 / 14 ) * MyData$High + (( 13 / 14 )*b[-1]))

显然,我在第一次计算时需要在某处有一个 NA,但我无法自己解决这个问题。

添加追求结果的示例(A=MyData$High):
  A  b
1 5 NA
2 10 0.7142...
3 15 3.0393...
4 20 4.6079...

最佳答案

1) for 循环 通常人们会为此使用一个简单的循环:

MyData <- data.frame(A = c(5, 10, 15, 20))


MyData$b <- 0
n <- nrow(MyData)
if (n > 1) for(i in 2:n) MyData$b[i] <- ( MyData$A[i] + 13 * MyData$b[i-1] )/ 14
MyData$b[1] <- NA

给予:
> MyData
A b
1 5 NA
2 10 0.7142857
3 15 1.7346939
4 20 3.0393586

2)减少也可以使用 Reduce .首先定义一个函数 f执行循环体,然后我们有 Reduce像这样重复调用它:
f <- function(b, A) (A + 13 * b) / 14
MyData$b <- Reduce(f, MyData$A[-1], 0, acc = TRUE)
MyData$b[1] <- NA

给出相同的结果。

这看起来像是被矢量化,但实际上如果你查看 Reduce 的来源它做了一个 for循环本身。

3) 过滤器注意到问题的形式是系数为 13/14 的递归滤波器对 A/14 进行运算(但将 A[1] 替换为 0),我们可以写出以下内容。自 filter返回我们使用的时间序列 c(...)将其转换回普通向量。这种方法实际上是矢量化的,因为过滤操作是在 C 中执行的。
MyData$b <- c(filter(replace(MyData$A, 1, 0)/14, 13/14, method = "recursive"))
MyData$b[1] <- NA

再次给出相同的结果。

注:所有解决方案都假设 MyData至少有 1 行。

关于引用计算中的前一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34624110/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com