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の速度比較]]