バージョン3.3.0のリリース
2016年5月3日、R のバージョン3.3.0がリリースされた。コードネームは Supposedly Educational(たぶん教育的)である。バージョン3.2.0がリリースされたのは、2015年4月16日なので、およそ1年を経てマイナーバージョンアップが行われたことになる [1] 。このバージョン3.3.0は本来4月中にリリースされる予定 [2] だったが、問題が発見されたためにリリースが5月に延期された [3] 。
バージョン3.3.0での変更点の詳細は、Rアナウンスメーリングリストでのバージョン3.3.0リリースの通知(R 3.3.0 is released、英語)を参照されたい。
バージョン3.3.0での主な変更点
以下で、バージョン3.3.0での変更点のうち、重要だと思われる点をいくつか紹介しよう。
文字列処理
- 文字列の長さを返す函数 nchar の NA に対する挙動が変わった。
- デフォルトでは、オプションで type = "width" が指定されていているときは NA の長さとして 2 を返し、それ以外のときは NA を返すようになった。
- nchar のオプションで type = "width" が指定されているときは、文字列の長さとして、画面上に等幅フォントで印字するときに何文字分の幅が必要かという情報が返される。NA を画面上に表示するには2文字分の幅が必要なので、2 が返されるのである。
- 今までのバージョンのデフォルトでは、type オプションに何を指定しても、常に 2 を返していた。)
- keepNA オプションを以下のように明示的に指定することで、type オプションの指定に関わりなく、NA の長さとして常に同じ値を返すように設定することができる。
- keepNA=T ならば、NA の長さとして常に NA を返す。
- keepNA=F ならば、NA の長さとして常に 2 を返す。これは、今までのバージョンのデフォルトと同じ挙動である。
- デフォルトでは、オプションで type = "width" が指定されていているときは NA の長さとして 2 を返し、それ以外のときは NA を返すようになった。
x <- c(5, 42, 173, NA) nchar(x) # 結果は 1 2 3 NA nchar(x, type="width") # 結果は 1 2 3 2 nchar(x, keepNA=T) # 結果は 1 2 3 NA nchar(x, type="width", keepNA=T) # 結果は 1 2 3 NA nchar(x, keepNA=F) # 結果は 1 2 3 2 nchar(x, type="width", keepNA=F) # 結果は 1 2 3 2
- 新しい函数として、validUTF8 が導入された。validUTF8 は与えられた文字列ベクトルの各要素が UTF8 において妥当なバイト列か判定するものである [5] 。
- 新しい函数として、strrep が導入された。これは、与えられた文字列を指定回数だけ繰り返したものを出力する。
- rep とは挙動が違うので注意。strrep("piyo", 2) は、長さ1のベクトル(要素は"piyopiyo"のみ)を返す。rep("piyo", 2) は、長さ2のベクトル(1番目の要素が"piyo"で、2番目の要素も"piyo")を返す。
strrep("piyo", 2) # 結果は "piyopiyo" rep("piyo", 2) # 結果は "piyo" "piyo" strrep("piyo", 1:3) # 結果は "piyo" "piyopiyo" "piyopiyopiyo" strrep(c("piyo", "fuga"), 2) # 結果は "piyopiyo" "fugafuga" strrep(c("piyo", "fuga"), c(3,4)) # 結果は "piyopiyopiyo" "fugafugafugafuga"
- 新しい函数として、startsWith と endsWith が導入された。startsWith(x, prefix) は x が prefix から始まるならば TRUE を、そうでなければ FALSE を返す。また、endsWith(x, suffix) は x が suffix から始まるならば TRUEを、そうでなければ FALSE を返す。
startsWith("category", "cat") # TRUE startsWith("dimension", "cat") # FALSE endsWith("perform", "per") # FALSE endsWith("newspaper", "per") # TRUE
- 正規表現を用いた検索でマッチしたものを返すときに使われる関数 regmatches に、invert=NA とオプションを指定することで、マッチしたものとマッチしていないものを返すことができるようになった。
- invert=Tを指定するとマッチしてないものだけが返る。これは今までのバージョンでも同様である。
x <- c("hoge and piyo", "foo or bar", "fuga or moge") pattern <- " (and|or) " # 文字列ベクトル x の個々の要素の中で " and " か " or "にマッチする最初の位置を取得する match <- regexpr(pattern, x) regmatches(x, match, invert=NA) # 以下の結果が返る # [[1]] # [1] "hoge" " and " "piyo" # # [[2]] # [1] "foo" " or " "bar" # # [[3]] # [1] "fuga" " or " "moge" regmatches(x, match) # 以下の結果が返る # [1] " and " " or " " or " regmatches(x, match, invert=T) # 以下の結果が返る # [[1]] # [1] "hoge" "piyo" # # [[2]] # [1] "foo" "bar" # # [[3]] # [1] "fuga" "moge"
統計処理
- 相関係数を求める函数 cor のバグ修正がなされた。相関係数は-1から1までの範囲の値をとる。しかし、今までのRでは、相関係数がこの範囲外の値をとってしまうことがあるというバグがあった。バージョン3.3.0から、相関係数が正しく-1から1の範囲に収まるようになった。
- 新しい函数として sigma が導入された。この函数は、残差の標準偏差 (residual standard deviation) を返すものである。なお、線形モデルに対して summary 函数で概要を表示する場合、残差の標準誤差 (residual standard error) が出てくるが、これは sigma 函数が返す残差の標準偏差と同じである。
# iris データから線形モデルを作る model1 <- lm(Petal.Length ~ Sepal.Length, data=iris) # 作成された線形モデルの概要を表示する summary(model1) # 作成された線形モデルから残差の標準偏差を取り出す sigma(model1)
描画
- 点グラフを出力するための函数 dotchart の引数として、pt.cex が加わった。これは点の大きさを制御するための引数である。
データフレーム
- データフレームを作るための data.frame 函数において fix.empty.names=F オプションを指定することで、列名がなくても自動的に補充されないようにすることができるようになった。
x <- 1:3 y <- c(F, T, F) z <- c("a", "b", "c") # 列名を明示せずにデータフレームを作る # デフォルトでは、列名が自動的に付けられる df1 <- data.frame(x, y, z) colnames(df1) # 結果は "x" "y" "z" # 列名を明示せずにデータフレームを作り、 # さらに自動的に列名を付けないように指定する df2 <- data.frame(x, y, z, fix.empty.names=F) colnames(df2) # 結果は "" "" ""
数値計算
- 微分を行うための函数 D に不適切な入力をしたとき、エラーが返るようになった。
- 今までのバージョンでは、エラーが出ず、単にNAが返るだけであった。
# Dの引数として適切なものを f に入れる # f には x の3乗が入っている f <- expression(x^3) D(f, "x") # x の3乗を x で微分した結果として、3 * x^2 が返る # Dの引数として適切でないものを g に入れる g <- "hoge" D(g, "x") # エラーが返る
プログラミング
- 新しい函数として、isS3method が導入された。これは、S3メソッドかを判定するための函数である [6] 。
# mean は S3総称函数なので、FALSEが返される isS3method("mean") # mean.Date は S3メソッドなので、TRUEが返される isS3method("mean.Date")
脚注
- なお、バージョン3.2.0と3.3.0との間に6回のリビジョンが行われている。すなわち、2015年6月18日にバージョン3.2.1が、8月14日にバージョン3.2.2が、12月10日にバージョン3.2.3が、2016年3月10日にバージョン3.2.4が、3月16日にバージョン3.2.4-revisedが、4月14日にバージョン3.2.5がそれぞれリリースされている。 [↩]
- R 3.2.4 and 3.3.0 [↩]
- Extending the beta period for R 3.3.0 till April 25, Final release on May 3 [↩]
- Pixabay にて公開されている Jonny Lindner (Comfreak)氏の手によるパブリックドメインの画像を利用。 [↩]
- 類似した函数として、validEnc も新しく導入された。 [↩]
- S3とは、Rにおけるオブジェクト指向プログラミングシステムの1つである。なお、S3総称函数かどうかを調べたければ、pryr パッケージの ftype 函数を使えばよい。また、S3オブジェクトであるかを調べたければ、pryr パッケージの otype 函数を使えばよい。 [↩]