S clone と言われる R です.S version 3 互換と言われていますが,じゃぁ S version 4 より劣っているのか? なんて素朴に疑問に思ったのですが…

----

*  [[What are the differences between R and S?:http://cran.r-project.org/doc/FAQ/R-FAQ.html#What%20are%20the%20differences%20between%20R%20and%20S%3f]] の教えるところ

[[R FAQ:http://cran.r-project.org/doc/FAQ/R-FAQ.html]] の [[What are the differences between R and S?:http://cran.r-project.org/doc/FAQ/R-FAQ.html#What%20are%20the%20differences%20between%20R%20and%20S%3f]] によれば,

- ''S'' には ''old S'' ,''new S'' ,''R'' という 3 種類の方言(エンジン)がある
- 相異点は以下の 3 つに大別される
-- Lexical Scope
-- Models
-- Others

とのこと.

** Lexical Scope
''lexical scope'' とは関数内で定義した変数のスコープ規則です.変数がその定義された環境にアクセスできるとした規則を lexical scope とよびます.
対義語は dynamic scope で,これは変数が定義されたそのスコープのみにアクセスできます.後者の方がより厳しい規則と言えます.
lexical scope を採用するメリットは [[R FAQ:http://cran.r-project.org/doc/FAQ/R-FAQ.html]] の [[What are the differences between R and S?:http://cran.r-project.org/doc/FAQ/R-FAQ.html#What%20are%20the%20differences%20between%20R%20and%20S%3f]]  にあげられていますが,大雑把には ''関数が簡単になる'' ことと考えれば良いのではないでしょうか.
''lexical scope'' とは関数内で使われる自由変数の値を定める際の規則です.関数が定義された時点での環境から値を求める規則を lexical scope とよびます.
対義語は dynamic scope で,これは関数が呼ばれた時点での環境から値を求めます.
lexical scope を採用するメリットは [[R FAQ:http://cran.r-project.org/doc/FAQ/R-FAQ.html]] の
[[What are the differences between R and S?:http://cran.r-project.org/doc/FAQ/R-FAQ.html#What%20are%20the%20differences%20between%20R%20and%20S%3f]]
に挙げられていますが,大雑把には「関数が簡単になる」こと,「バグが減る」ことと考えれば良いのではないでしょうか.

** 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'' ,''FALSE''  を使うことが望ましい.
: ''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 の違い

* 関連リンク
- [[RとS-plusの速度比較]]

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS