繁体   English   中英

在 r 中创建递归 function

[英]creating recursive function in r

set.seed(1)
x <- runif(50, 0, 1)
y <- runif(50, 0, 1)
df<-as.data.frame(cbind(x,y))

vall<-c(rep(0,50))
n<-4
theval <- function(data) {
 for (i in n:length(data$x)) {
   vall[i] <- 0.4*(data$x[i]/data$y[i]) + vall[i-1]*0.6
 }
 return(vall)
}

vall <- theval(df)

嗨,我对 R 中的某种递归 function 有疑问。
我想推导出一个 function ,其计算如下公式。

z(t) = 0.4* (x(t) / y(t)) + 0.6*z(t-1) 当 t < 3 时 z(t)=0

我的代码给出了结果,但结果是错误的。

[1]  0.00000000  0.00000000  0.00000000  0.54579432  0.03226801  0.34139501  0.33139827  0.06531491  0.30135295
[10] -0.18739884

当我手动计算时,第一个非零答案(第四个)应该是 0.2653642。
你能告诉我我做错了吗?

谢谢!

以下 function 计算问题中的公式,但它给出了另一个结果。

theval <- function(data, n) {
  z <- numeric(nrow(data))
  for (i in n:length(data$x)) {
    z[i] <- 0.4*(data$x[i]/data$y[i]) + 0.6*z[i - 1]
  }
  z
}

set.seed(1)
x <- runif(50, 0, 1)
y <- runif(50, 0, 1)
df <- data.frame(x, y)

z3 <- theval(df, n = 3)
z4 <- theval(df, n = 4)

head(z3)
#[1] 0.0000000 0.0000000 0.5230378 1.7978388 2.2200992 4.9449051
head(z4)
#[1] 0.000000 0.000000 0.000000 1.484016 2.031806 4.831929

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM