R 2.14.0 の仕様変更とパッケージ更新の注意点

Updating packages for changes in R (R Developer Page)

R Developer Page には、リリース前のバージョンを含む R の最新情報が掲載されています。 次期リリース (2011/10/31) 予定のバージョンでの仕様変更に伴って、パッケージ開発者がアップデートする必要がある情報が Updating packages for 2.14.0 に記載されていますので、これをまとめてみます (ミスがあるかもしれませんので原文も合わせてご確認ください)。

はじめに

R 2.14.0 は 2011/10/31 にリリース予定です。 パッケージ管理者は以下の変更点に留意してください。

遅延ロードについて

全てのパッケージは遅延ロードされるようになります。 DESCRIPTION ファイルに LazyLoad フィールドを設定している場合は削除してください。 LazyLoad: false を指定した場合、インストール時に警告が出ます。

これによって影響を受けるパッケージは非常に少ないでしょう。 影響を受ける場合の多くは、トップレベルコードとその副作用を利用したパッケージだと思われます。 この問題については 'Writing R Extensions' でもずっと警告を行っていました。

名前空間について

全てのパッケージに名前空間が設定されます。 NAMESPACE ファイルが無い場合、R CMD INSTAL の実行時に NAMESPACE ファイルが自動生成されます (R CMD build でも同様に自動生成を行います)。

自動生成される NAMESPACE ファイルを用いても、ほとんどの場合 (CRAN 登録されたうち 1000 以上のパッケージで) はうまく動作するでしょう。 ただし、自動生成に頼るのではなく、この NAMESPACE ファイルを元にして、確認の上 NAMESPACE ファイルをアップデートするべきでしょう。

また、現在以下の問題点がある事が分かっています。

  • デフォルトでは、全てのシンボル (オブジェクト名が '.' で始まる場合も) が名前空間に展開されます。 展開するシンボルを選ぶ必要がある場合も多いため、必要に応じてデフォルトから変更してください。
  • .First.lib() 関数を利用している場合、.onAssign (.onAttach のミスと思われるので以下 .onAttach) として実行されます。 多くの場合、コンパイルされたコードをロードする場合にだけ使われており、NAMESPACE 中で useDynLib ディレクティブで置き換えることができます。 もしコンパイルされたコードをロードする以外の目的で使っているならば、.First.lib() 関数は .onAttach() または .onLoad() にリネームしておくべきです。 ただし、まれに .onAttach().onLoad() の二つに分割する必要がある場合もあります。
    また、例外として、.First.lib() 関数を .onLoad() として実行するべき場合があり、これらは base::.Firstlib_as_onLoad オブジェクト中にリストアップされています。
  • パッケージの environment は保護されており、変動する値を格納するために利用することはできません。 そのため、別の environment を代わりに用いる必要があります。 例えば、'grDevices' パッケージが参考になるでしょう。
  • スコーピングの問題が起こる可能性があります。 もし、'quantreg' パッケージを介して、SparseM パッケージの t() 関数を利用する場合、名前空間に SparseM パッケージ (または、SparseM の中の利用する関数のみ) をインポートする必要があります。 これについては、'base' 中の関数をマスクする S4 ジェネリックが用いられている事として一般的にも認知されているでしょう。
  • パッケージ中で、'stats' などの他のパッケージ中のジェネリックに対して S3 メソッドを定義している場合、ジェネリックをインポートし、かつ、S3method ディレクティブを用いてメソッドをエクスポートする必要があります。
  • 他のパッケージの関数を引き継いで S4 ジェネリック (特に plot() など) を構築した S4 メソッドを用いるパッケージは、引き継いだ関数をインポートする必要があります。 たとえば、importFrom(graphics, plot) とします。 これは、R 2.14.x でない場合も動作するようですが、パッケージを R 2.13.x にインストールすることはできません。

Vignette ソースファイルの配置

Vignette ソースファイルはディレクトリ 'inst/doc' ではなく 'vignettes' に配置するようにしてください。 移行期間として R <= 2.13.x との互換性を保ったメンテナンスを継続したい場合、まずは .Rinstignore ファイルを用いて、Vignette の .Rnw (etc) ファイルや .pdf ファイル以外の他のファイルがインストールされないようにしてください。 次に、ユーザーが Vignette コードを実行するために必要な他のファイルを追加してください。

もし Vignette ファイルが CRAN でコンパイルできないことが事前に分かっている場合 (例えば、特殊な LaTeX ファイルを利用している場合など) は、DESCRIPTION ファイルの BuildVignettes フィールドの値を false に設定してください。 また、Vignette ファイル中の R コードは Stangle 関数によって展開されるので、実行可能なコードになっている必要があります。

非推奨に変更された関数

データフレーム x (sd については行列の場合も) に対し、mean(x)sd(x) を単純に実行する事は非推奨となり、警告が表示される様になります。 どちらもかなり広く用いられていますが今後は、sapply()vapply() または mean の場合はcolMeans() に置き換えなければなりません。

履歴

  • 2011/10/25 公開