首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何创建一个函数来定义R中局部最大值的移动阈值?

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

Stack Overflow用户
提问于 2020-04-18 12:16:33
回答 2查看 57关注 0票数 0

目标是量化一定的增长。定义如下:序列中的每个值应与前面的值进行比较,如果以下值大于前一个值,则应考虑(返回)。如果没有,则应予以删除。因此,更大的价值被用来作为以下的一个新的参考。随升序值移动的阈值。我试过这个:

代码语言:javascript
复制
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只是把1加到I的值上。结果应该如下所示:

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

提前感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-18 12:26:00

函数growthfun中存在一些问题

  1. 你需要的可能是print,而不是return。否则,该函数在满足条件时退出-- i in seq_along(a)

  • ,您可能需要a中元素的索引,该索引应该是

对于您的目标来说,一个例子可能如下所示:

如果要打印进度,则使用print

代码语言:javascript
复制
growthfun<-function (a) {
  for (i in seq_along(a)) {
    if (a[i] >= max(a[1:(i-1)])) {
      print(a[i])
    }
    else {
      next
    }
  }
}

这给

代码语言:javascript
复制
> 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

如果要将输出保存在数组

  • 中,则为

代码语言:javascript
复制
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
}

这给

代码语言:javascript
复制
> growthfun(growthdata)
 [1] 21679 21722 21788 21863 21937 22026 22235 22348 22399 22463
[11] 22532 22562 22589 22609
票数 0
EN

Stack Overflow用户

发布于 2020-04-18 12:22:29

您可以只对cummax值使用unique

代码语言:javascript
复制
unique(cummax(growthdata))
#[1] 21679 21722 21788 21863 21937 22026 22235 22348 22399 22463 22532 22562 22589 22609
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61288931

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档