我用 C++ 编写了一个函数,它执行以下操作:给定一个(可能很长的)向量x
和一个阈值,thr
找到、和≥y
的子序列。目的是找到“看起来相同”的位置的短子序列,即图形的分辨率为。x
x[1]∈y
x[length(x)]∈y
∀i∈1:length(y) y[i+1]-y[i]
thr
x
plot(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')
欢迎对此提出任何想法。