一人R勉強会 その4

Rの基礎とプログラミング技法

Rの基礎とプログラミング技法

今日はちらっとだけ進めた。
2章の残り最後まで

2.10プログラムの制御構造

ループとか条件判定とか

2.10.1条件判定

ifはともかくifelseってのが面白そうな感じだ。
swich()もあるらしい。

これちょっとした裏技

プログラミングコードの一部分をコメントアウトする方法として、if(FALSE) {プログラミングコードの一部分}と記述すると便利である。

おぉー、これは他の言語でも使えますね。
Rって複数行をコメントアウトする機能ないのかな、と探しましたが見つかりませんでした。
今まで#を連発していたので、これからはこいつを使って行こう。

ifelse()では、ベクトルの要素ごとに条件の判定と式の実行がなされる。

ifとの違いが分からない><
と思っていたら、

条件式も実行式もベクトルの要素ごとに評価が行われる。

という一文と実行例を見て感動した!

> a <- c(1,2)
> ifelse(a == c(2,2), c("TRUE1","TRUE2"), c("FALSE1","FALSE2"))
[1] "FALSE1" "TRUE2" 

てな具合です。
条件式の要素ごとに結果を分岐させれるワケですね。
どこにどう使うか全く想像がつかないけど、使いこなせればスマートな感じになりますね。

2.10.2ループ制御

目新しいものとしてはrepeatか。
以下の一文からwhile(1)とほぼ等価と考えてもいいのかな。

制御語であるbreakで終了を指定されない限り無限に実行される。

forはPythonのforとほぼ一緒なので、慣れたものである。

で、一番重要なのが、「ループを避けるべき場合」と書かれた部分だろう。

1行が1度だけ解読されるベクトルの要素ごとの評価と比較すると、ループは明らかに時間のかかる処理である。また、オブジェクトの転送回数も、ベクトルによる処理を選んだ方がはるかに少なくなる。

他の方法(例えば、ベクトル処理)が可能な場合にはループは避けるべきである。

目下のところ、for文の繰り返しに慣れた脳をRのベクトル脳に改造するのが急務である。
速度を見える化してやらないと、なかなかベクトル脳になろうとしないのが俺クオリティなので、また実験しましょう。
そしてベクトルの先に、C言語への拡張があるというワケですね。
先はまだまだ長いですね。

2.11文字列

Rでそうそう文字列を扱うことはないだろうけど、動的にファイルを作って結果を吐き出させたいときには有効か。
今使っているのは、prit()とpaste()くらいだけど、cat()が文字列出力で一番ベーシックなものなのね。

2.12日付と時間

実はこれけっこう重要かも。
strptime()で文字列をPOSIXltクラスのオブジェクトに変換した後は引き算とかで時間差が求められるね。
研究よりもアルバイトで必要かも。
またいろいろ試しましょう。

2章完了。