S clone と言われる R です.S version 3 互換と言われていますが,じゃぁ S version 4 より劣っているのか? なんて素朴に疑問に思ったのですが…
R FAQ の What are the differences between R and S? によれば,
- S には old S ,new S ,R という 3 種類の方言(エンジン)がある
- 相異点は以下の 3 つに大別される
- Lexical Scope
- Models
- Others
とのこと.
Lexical Scope
lexical scope とは関数内で使われる自由変数の値を定める際の規則です.関数が定義された時点での環境から値を求める規則を lexical scope とよびます.
対義語は dynamic scope で,これは関数が呼ばれた時点での環境から値を求めます.
lexical scope を採用するメリットは R FAQ の
What are the differences between R and S?
に挙げられていますが,大雑把には「関数が簡単になる」こと,「バグが減る」ことと考えれば良いのではないでしょうか.
Models
- Sではlm(y ~ x^3)が、Rでは lm(y ~ I(x^3))
- glm family objects の名前が違う
- na.actionのデフォルトはna.omit(Sでは違うそうです)
- Rでは切片のないモデルを y~x-1 だけでなく、y~x+0とも表現できる。
Others
- T と F は予約語では ない
- T と F は普通はそれぞれ TRUE と FALSE と解釈されるが,
ユーザが T <- 0 のように書き換えることができる.(始めからTRUEを代入された変数にすぎない)
これは二値データを扱う際に便利である.したがって,関数を書く際には(正式に) TRUE ,FALSE を使うことが望ましい.
- 乱数発生
- Rはメルセンヌ・ツイスター、Sは?
- データフレーム
- Sではデータフレームは行列として扱われる。Rではデータフレームと行列は別物
- NA
- Rでは文字変数であれば、NAはmissing扱いにならない。
::
S version 3 と S version 4 の違い
S version 3 と R の違い
S version 4 と R の違い
関連リンク