1

我用 C++ 编写了一个函数,它执行以下操作:给定一个(可能很长的)向量x和一个阈值,thr找到、和≥y的子序列。目的是找到“看起来相同”的位置的短子序列,即图形的分辨率为。xx[1]∈yx[length(x)]∈y∀i∈1:length(y) y[i+1]-y[i]thrxplot(x)plot(x[subsequence])thr

该函数是 R 包的一部分,使用该Rcpp接口调用 C++ 函数。来源在这里: https ://gist.github.com/kenahoo/8922376 。(它实际上对 a 进行操作data.frame,而不是简单的向量,但它相当于将每一列作为向量独立地操作,然后合并索引序列。)

我想找到一个等效的纯 R 解决方案,它既好又高效 - 一个明显的想法是类似的which(diff(x)>thr),但这不合适,因为它会错过任何缓慢漂移的值,这些值随着时间的推移而超过thr.

例子:

> set.seed(123)
> x <- cumsum(runif(100, -1, 1))
> y <- downsampleForPlot(data.frame(x=x), 2.5)
> y
[1]   1  11  26  46  57  71  81 100

这会产生这样的近似值:

> plot(x)
> lines(stepfun(y[-1], x[y], f=0), col='blue')

近似图

欢迎对此提出任何想法。

4

0 回答 0