2012-02-16 4 views
19

Rrequire()またはlibrary()の機能にはversionという引数がないことに気がつきました。パッケージの最低限のバージョンを確実に確保する必要がある場合、人々は何をしますか?彼らはいくつかのバグが修正されているか、またはいくつかの機能が利用可能であることを知っていますか?Rパッケージの最小バージョンを要求する

は、私は、パッケージ作成者のためのDependsものを認識してんだけど、私はなど、スクリプト、インタラクティブな環境、org-modeファイル、コードスニペットで使用するために何かを探しています

答えて

7

私はそのように認識していないです関数を作成するのは非常に簡単です。 sessionInfo()またはpackageVersion()に置くことができます。スクリプトに必要なパッケージをロードした後、そこからパッケージ番号を取得できます。 (私は今の時間を持っていないとして、擬似コードで)バージョン番号は次のようになりチェック機能:

check_version = function(pkg_name, min_version) { 
    cur_version = packageVersion(pkg_name) 
    if(cur_version < min_version) stop(sprintf("Package %s needs a newer version, 
       found %s, need at least %s", pkg_name, cur_version, min_version)) 
} 

ようにそれは次のようになり呼び出す:あなたはまだする必要が

library(ggplot2) 
check_version("ggplot2", "0.8-9") 

バージョン番号を比較してcur_version < min_versionのようなものに構文解析しますが、基本的な構造は変わりません。

+3

感謝を。 'compareVersion()'はバージョン比較に使うべき正しいことです。 –

+0

機能がそこにあった、何かを自分で作ることを試みたが、それは必要なかった:)。 –

+0

@KenWilliams - ニースキャッチ。私はそれを見て、ヘルプページの文で "Rパッケージのバージョン番号は 'x.y-z'の形式になっています。しかし、現実的には、 '' - ''と '' '' ''の両方にstrsplit()のように見えるので、詳細は重要ではありません。 –

14

あなたはpackageVersion()を使用することができます。

packageVersion("stats") 
# [1] ‘2.14.1’ 

if(packageVersion("stats") < "2.15.0") { 
    stop("Need to wait until package:stats 2.15 is released!") 
} 
# Error: Need to wait until package:stats 2.15 is released! 

packageVersion()は、我々は彼らを使用して2つの文字列を比較するとき<はないであろう(それを好きなどの<ふるまうのクラスpackage_versionのオブジェクトを返すので、これは動作します辞書順)。

11

ポールの擬似コードを読んだ後、ここに書いた機能があります。

use <- function(package, version=0, ...) { 
    package <- as.character(substitute(package)) 
    library(package, ..., character.only=TRUE) 
    pver <- packageVersion(package) 
    if (compareVersion(as.character(pver), as.character(version)) < 0) 
    stop("Version ", version, " of '", package, 
     "' required, but only ", pver, " is available") 
    invisible(pver) 
} 

それは基本的にlibrary()と同じように機能し、余分なversion引きとります

> use(plyr, 1.6) 
> use(ggplot2, '0.9') 
Error in use(ggplot2, "0.9") : 
    Version 0.9 of 'ggplot2' required, but only 0.8.9 is available 
関連する問題