用模糊搜索识别R中数值向量的重复模式

时间:2016-02-29 16:19:30

标签: r algorithm function

想象一下这样的整数向量:

> rep(c(1,4,2),10)
[1] 1 4 2 1 4 2 1 4 2 1 4 2 1 4 2 1 4 2 1 4 2 1 4 2 1 4 2 1 4 2

对于我们人类来说,即使不知道矢量是如何创建的,也可以很容易地识别模式1 - 4 - 2。但是你如何使用R?

来识别这种模式

修改

由于这个问题被标记为欺骗,我将稍微说明一下。上面的例子很容易解释这个想法。主要目标是识别更多隐藏的模式,如1 4 2 5 6 7 1 4 2 9 1 4 2 3 4 5 1 4 2,以及与1 4 2 1 4 1.99 1 4 2 1.01 4 2 1 4.01 2大致相同的模式。在这些情况下,始终确定模式1 4 2有哪些想法?

1 个答案:

答案 0 :(得分:4)

假设子模式必须从开头开始并重复到输入的结尾,尝试使用子模式长度k = 1,2,3 ......我们假设只有模式的长度的一半输入或更少的输入将被考虑:

for(k in seq_len(length(x)/2)) {
    pat <- x[1:k]
    if (identical(rep(pat, length = length(x)), x)) { 
         print(pat)
         break
    }
}
## [1] 1 4 2

注意:这用作输入x

x <- rep(c(1, 4, 2), 10)