2016年5月29日日曜日

コロン演算子

値がない場合の処理ネタです。

ベクトルvに対して for(i in 1:length(v))という回し方をすることがあります。

ついlength(v)が0だったら1回も実行しないことを期待してしまうのですが

とんでもないことです。

0回どころか、1と0の2回実行してしまいます。4:1は動作確認です。

ついでに調べてみました。


これは、高値を更新した回数を数えるという問題で遭遇した『問題』です。


【3行目】xts型からnumericに変換しなおかつna.omitをして用心深くやっています。xts型のままだと日付が違うと比較してくれないとかいろいろな問題が起きそうなので。こんなに用心したのに、

【4・5行め】泣く泣く入れました。

【7行め】問題の個所です。

【9行め】エラーはこの行で出ます。nが0の時、hの値がないので、比較できないと怒られます。

最初、forを使わないバージョンを作ったのですが、「それぞれの日の高値」と「それ以前の最高値」と比較するために、毎回maxをとるのはおかしいのではないかと思い、はじめの方から見ていき、最高値(m)の更新と、更新した回数を一回で調べています。1回で済むんですね、と変に感激。【行番号9】

例によって全銘柄に適用して、高値更新回数の多いほうからリストしてみます。


最近高値更新したかに関心があります。どのようにしたらよいか、またいずれ考えます。

なお、コロン演算子というのは私の勝手な命名です。pythonにありましたっけ?しばらく使ってないので忘れています。

0 件のコメント:

コメントを投稿