【问题标题】:Access previous value of a vector in sapply在 sapply 中访问向量的先前值
【发布时间】:2019-12-02 06:26:45
【问题描述】:

我希望编写以下代码的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
  }

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

x <- rstable(100, alpha = 1.48, beta = 0.99, gamma = 0.27, delta = 3.36)

【问题讨论】:

    标签: sapply


    【解决方案1】:

    不确定这是否对其他人有帮助,但我找到了一种方法,可以在不使用 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 标准,则不会计算平均值。

    【讨论】:

      猜你喜欢
      • 2015-10-15
      • 2020-08-21
      • 2018-02-04
      • 2020-06-05
      • 1970-01-01
      • 1970-01-01
      • 2021-09-07
      • 1970-01-01
      • 2011-01-29
      相关资源
      最近更新 更多