2

次のベクトルがあるとします。

vec = c(29, 30, 15, 29, 17, 25, 24, 28, 25, 24, 28, 25, 24, 28, 25, 24, 28)

3 つの繰り返し要素 (25、24、および 28) があることがわかります。ベクトルに繰り返し要素 (またはサイクル) がある場合、R に認識させるにはどうすればよいですか? 繰り返している要素の数 (3 ではなく 2 または 5) や、開始するベクトルの要素の数に関係なく、これを検出したいと考えています。

コンテキストのために、値に収束しようとしているアルゴリズムがありますが、この繰り返しループでスタックすることがあります。R がこの無限ループに陥ったことを検出して抜け出してもらいたいのです。私のvec例では、各反復での値のログです。

二重の繰り返し要素をキャッチする方法 (最後の繰り返しの値を保存して現在の繰り返しと比較する方法) を理解しましたが、この 3 つ以上の繰り返し要素には困惑しています。

4

3 に答える 3

0

これはうまくいくかもしれません:

vecもう少し長く実行できる場合:

vec = c(29, 30, 15, 29, 17, 25, 24, 28, 25, 24, 28, 25, 24, 28, 25, 24, 28, 25, 24, 28, 25, 24, 28, 25, 24, 28, 25, 24, 28, 25, 24, 28)

次に、これで最大 10 要素の長さのサイクルを見つけることができます。より長いサイクルは、変更することで組み込むことができますが10、うまくいけば、それに対処する必要はありません!

any(sapply(1:10, function(i) all(tail(diff(vec, lag = i), 10) == 0)))
于 2016-12-20T01:03:19.853 に答える