如何创建一个函数来定义沿 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
提前致谢!
您只能将 cummax
与 unique
值一起使用。
unique(cummax(growthdata))
#[1] 21679 21722 21788 21863 21937 22026 22235 22348 22399 22463 22532 22562 22589 22609
你的函数有一些问题growthfun
:
- 您需要的可能是
print
,而不是 return
。否则,函数在满足条件时退出
- 你可能需要
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
目标是量化一定的增长。定义如下: 序列中的每个值都应与前一个值进行比较,如果后一个值大于前一个值,则应考虑(返回)。如果不是,则应将其丢弃。因此,较大的值被用作以下值的新参考。随升序值移动的阈值。我试过这个:
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
提前致谢!
您只能将 cummax
与 unique
值一起使用。
unique(cummax(growthdata))
#[1] 21679 21722 21788 21863 21937 22026 22235 22348 22399 22463 22532 22562 22589 22609
你的函数有一些问题growthfun
:
- 您需要的可能是
print
,而不是return
。否则,函数在满足条件时退出 - 你可能需要
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