2016-10-14 3 views
1
n <- length(rle(sign(z))) 

zには1と-1が含まれています。 nは、zの符号が何回変化するかの数を示すべきである。ベクトル内のrleコマンドカウントの変化

上記のコードは、望ましい結果につながりません。コマンドを展開すると、

length(rle(sign(z))[[1]]) 

が動作します。私はどのように[1]が問題を解決するのかの根底にあるメカニズムを理解していませんか?

+0

'z'に-1と1だけが含まれている場合、' sign'の呼び出しは冗長です。 –

+2

次に、 'help(rle)'、特に* Value *セクションを読むべきです –

+0

あなたの問題のもう一つの解決策は 'sum(diff(z)!= 0)'です。 – Gregor

答えて

2

rleは、lengthsvaluesの2つのコンポーネントで構成されるリストを返します。これとは対照的に、これらのコンポーネントの長さ(明らかに同じ長さ)を知りたい場合は、そのコンポーネント自体のlengthは常に2です。したがって、length(rle(…)[[1]])またはlength(rle(…)[[2]])のいずれかが機能します。ただし、インデックスの代わりに名前を使用する方が効果的です(例:

length(rle(z)$lengths) 

ただし、これは記号が変更された回数ではありません。むしろ、変更の回数+1になります。

関連する問題