如何求和范围并计算R中的一系列?

时间:2014-08-31 21:06:12

标签: r sum

这是我试图用R计算的公式。

enter image description here

到目前为止,这是我使用简化示例的方法

t  <- seq(1, 2, 0.1)
expk <- function(k){exp(-2*pi*1i*t*k)}

set.seed(123)
dat <- ts(rnorm(100), start = c(1994,3), frequency = 12)
arfit <- ar(dat, order = 4, aic = FALSE)  # represent \phi in the formula

tmp1 <- numeric(4)  

for (i in seq_along(arfit$ar)){
    ek <- expk(i)
    arphi  <- arfit$ar[i]
    tmp1[i] <-  ek * arphi
    }

tmp2 <- sum(tmp1)

denom = abs(1-tmp2)^2
s2 <- t/denom 

错误:警告消息: 在tmp1 [i]&lt; - ek * arphi中:   要替换的项目数量不是替换长度的倍数

我试图避免使用for循环并尝试使用sapply,就像在question的解决方案中一样。

denom2 <- abs(1- sapply(seq_along(arfit$ar), function(x)sum(arfit$ar[x]*expf(x))))^2 

但似乎不正确。问题是在从另一个向量中获取值时,对序列的总和(在索引k上),在这种情况下,t在分子中。  任何解决方案?

对测试数据集的任何建议,可能使用0和1检查此循环中的计算是否正确完成?

1 个答案:

答案 0 :(得分:1)

键入聊天中确定的答案。这是一个涉及vapply的解决方案。

首先将expk更正为:

expk <- function(k){sum(exp(-2*pi*1i*t*k))}

然后你可以创建这个函数并vapply

myFun <- function(i) return(expk(i) * arfit$ar[i])
tmp2 <- sum(vapply(seq_along(arfit$ar), myFun, complex(1)))