访问向量中先前的值

问题描述 投票:0回答:1

我希望编写以下代码的sapply版本。如您所见,for代码将位置i处的值替换为位置i-1i+1处的平均值。如何使用sapply执行此操作?

  test <- c(1:length(x))
  if(length(which(x > mean(x) + sd(x)*3)) > 0){
    for (i in 1:length(x)) {
      if(x[i] > mean(x) + sd(x)*3){
        x[i] <- mean(x[i-1], x[i+1])
      }
      else{
        x[i] <- x[i]
      }
    }
  }
  else{
    test <- x
  }

为了生成合适的(即非正常的)测试向量,我使用了rstable包中的StableEstim函数。

x <- rstable(100, alpha = 1.48, beta = 0.99, gamma = 0.27, delta = 3.36)
sapply
1个回答
0
投票

[不确定这是否对其他人有帮助,但是我找到了一种无需使用sapply即可降低代码计算强度的方法:>

spiker <- function(x){
  l <- c(which(x > mean(x) + sd(x)*3), which(x < mean(x) - sd(x)*3))
  if(length(l) > 0){
    for (i in l) {
     x[i] <- mean(x[i-1], x[i+1])
    }
    x <- x
    spiker(x)
  }
  else{
     x <<- x
  }
}

唯一的问题是,如果向量x中的第一个或最后一个元素满足3 sd标准,则将不会计算平均值。

© www.soinside.com 2019 - 2024. All rights reserved.