想象一下这样的整数向量:
> 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
有哪些想法?
答案 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)