2013-02-25 9 views
6

私は他人のコードを試したり、例を実行しなければならないときは、特にinstall.package関数を多く使用しています。引数としてパッケージ名を渡すR

私はパッケージをインストールして読み込む関数を書いています。私は次のことを試してみましたが、それはうまくいきませんでした:

inp <- function(PKG) 
{ 
    install.packages(deparse(substitute(PKG))) 
    library(deparse(substitute(PKG))) 
} 

私はinp(data.table)を入力すると、それは私がこのケースでは、引数としてライブラリ名を渡すん

Error in library(deparse(substitute(PKG))) : 
    'package' must be of length 1 

どのように言いましたか? Rの関数の引数として、あらゆる種類のオブジェクトを渡すことに関する情報に誰かを案内することができれば、私は感謝します。

+1

は、この素敵な機能を見てください:https://github.com/gimoya/theBioBucket-Archives/blob/master/R/Functions/instant_pkgs.R – EDi

答えて

8

library()は、デフォルトでは、文字またはの最初の引数として受け入れるため、エラーが発生しています。その最初の引数にdeparse(substitute(PKG))があり、それが見つかるとその名前のパッケージが見つかりません。

library()に文字列を最初の引数として期待するように設定するcharacter.only=TRUEを設定すると、問題を修正する必要があります。これを試してみてください:

f <- function(PKG) { 
    library(deparse(substitute(PKG)), character.only=TRUE) 
} 

## Try it out 
exists("ddply") 
# [1] FALSE 
f(plyr) 
exists("ddply") 
# [1] TRUE 
+0

は、私はそれがさらに良いことだと思います'PKG'を文字列として受け取ります。非標準的な評価に頼ると、デバッグが難しいコードにつながります。 – hadley

+0

@hadleyどうすればいいですか? –

+0

@ Stat-Rは 'f(" plyr ")'のような関数を呼び出します。 – hadley

関連する問題