如何创建一个函数来定义沿 R 中局部最大值的移动阈值?

How do I create a function that defines a moving threshold along local maxima in R?

目标是量化一定的增长。定义如下: 序列中的每个值都应与前一个值进行比较,如果后一个值大于前一个值,则应考虑(返回)。如果不是,则应将其丢弃。因此,较大的值被用作以下值的新参考。随升序值移动的阈值。我试过这个:

growthdata<-c(21679, 21722, 21788, 21863, 21833, 21818, 21809, 21834, 21937, 22026, 22025, 22235, 22191, 22348, 22399, 22463, 22532, 22562, 22589, 22609, 22556, 22565)
growthfun<-function (a) {
  for (i in a) {
    if (i < (i+1)) {
      return(i)
    }
    else {
      next
      }
  }
}

这是一个初学者的问题。我似乎无法定义以下值 (i+1)。按照我的写法,R 只是将 i 的值加 1。 结果应如下所示:

21679, 21722, 21788, 21863, 21937, 22026, 22235, 22348, 22399, 22463, 22532, 22562, 22589, 22609

提前致谢!

您只能将 cummaxunique 值一起使用。

unique(cummax(growthdata))
#[1] 21679 21722 21788 21863 21937 22026 22235 22348 22399 22463 22532 22562 22589 22609

你的函数有一些问题growthfun:

  1. 您需要的可能是 print,而不是 return。否则,函数在满足条件时退出
  2. 你可能需要a中元素的索引,应该是i in seq_along(a)

你的例子 objective 可能如下所示:

  • 如果要打印进度,则使用print
growthfun<-function (a) {
  for (i in seq_along(a)) {
    if (a[i] >= max(a[1:(i-1)])) {
      print(a[i])
    }
    else {
      next
    }
  }
}

这给出了

> growthfun(growthdata)
[1] 21679
[1] 21722
[1] 21788
[1] 21863
[1] 21937
[1] 22026
[1] 22235
[1] 22348
[1] 22399
[1] 22463
[1] 22532
[1] 22562
[1] 22589
[1] 22609
  • 如果要将输出保存在数组中
growthfun<-function (a) {
  r <- c()
  for (i in seq_along(a)) {
    if (a[i] >= max(a[1:(i-1)])) {
      r <- c(r,a[i])
    }
    else {
      next
    }
  }
  r
}

这给出了

> growthfun(growthdata)
 [1] 21679 21722 21788 21863 21937 22026 22235 22348 22399 22463
[11] 22532 22562 22589 22609