不足しているパッケージをチェックしてインストールするエレガントな方法は?


336

最近、多くのコードを共著者と共有しているようです。それらの多くは初心者/中級Rユーザーであり、まだ持っていないパッケージをインストールする必要があることを理解していません。

を呼び出すエレガントな方法はありinstalled.packages()ますか?それをロードしてインストールしているものと比較して、見つからない場合はインストールしますか?


1
@krlmlr受け入れられた回答は古く、修正が必要ですか?それは私のために(いくつかの簡単なテストのために)の下で動作しR version 3.0.2 (2013-09-25) x86_64-w64-mingw32/x64 (64-bit)ます。
Brian Diggs 2013年

1
@BrianDiggs:この問題に対処するために少なくとも3つのパッケージが表示されていますが、以下では1つしか参照されていません。さらにもっとありますか-それが問題です。
krlmlr 2013年

2
@krlmlr(他の人が)必要なパッケージを確保するためにパッケージを使用することについて、皮肉な鶏と卵の問題が少しあるようです。しかし、確かにそれらについて知っている誰かに答えを書いてもらう価値はあります。
Brian Diggs 2013年

2
@BrianDiggs:このインストールチェックパッケージのブートストラップは必要な厄介ですが、小さなものです。もちろん、機能性がその方法を見つけない限りbase... ;-)
krlmlr 2013年

回答:


303

はい。パッケージのリストがある場合は、それを出力と比較してinstalled.packages()[,"Package"]、不足しているパッケージをインストールします。このようなもの:

list.of.packages <- c("ggplot2", "Rcpp")
new.packages <- list.of.packages[!(list.of.packages %in% installed.packages()[,"Package"])]
if(length(new.packages)) install.packages(new.packages)

さもないと:

コードをパッケージに入れて依存関係にすると、パッケージのインストール時に自動的にインストールされます。


11
私は、適切な構文があると思う: if(length(new.packages)>0) {install.packages(new.packages)}

5
@psql、Shineは正解です。if条件では "> 0"が「暗黙的」であるためです。それを検証するためにこれを実行しますnew.packages <- c(1,2) length(new.packages) if(length(new.packages)){print("hello!")}else{print("oh no!")}
アンドレアCirilloのに

7
installed.packagesのドキュメントには、「数千のパッケージがインストールされている場合は遅くなる可能性があるため、これを使用して名前付きパッケージがインストールされているかどうかを確認しないでください(system.fileまたはfind.packageを使用)...」
Thomasマテルナ2016年

2
トーマスに同意します。これはrequireチェックするよりもパフォーマンスが向上しますinstalled.packages
マシュー

1
packratこれのために作られました。再現可能なパッケージ管理システムです。この方法はそれを間違った方法で行っており、他の誰かの環境を混乱させ、再現性がありません。Packratには、共有ライブラリ用の独自のフォルダと環境があります。rstudio.github.io/packrat
mtelesha

231

Dason K.と私はこれをうまく行うことができるpacmanパッケージを持っています。p_loadパッケージ内の関数がこれを行います。最初の行は、pacmanがインストールされていることを確認するためのものです。

if (!require("pacman")) install.packages("pacman")
pacman::p_load(package1, package2, package_n)

1
パッケージのステータスは何ですか?C-RANが見えません。
MERose、2015

4
@MERose パックマンは CRANされるようになりましたcran.r-project.org/web/packages/pacman/index.html
タイラーRinker

6
今すぐインストールして、うまく動作しました。ベースの一部である必要があります!
AndyF

3
これを確認する唯一の方法は、それがチェックされ/、見つかった場合はgithubから自動的にインストール/ロードすることです。
2016年

4
@NealBarsch if (!require("pacman")) install.packages("pacman")p_boot()、pacmanにこの行を自動的に作成し、クリップボードにコピーするというpacmanの関数があることを意味します。
タイラーリンカー、

72

あなたはただの戻り値を使うことができますrequire

if(!require(somepackage)){
    install.packages("somepackage")
    library(somepackage)
}

libraryインストールが成功しなかった場合、または他の理由でパッケージをロードできない場合に例外がスローされるため、インストール後に使用します。これをより堅牢で再利用可能にします。

dynamic_require <- function(package){
  if(eval(parse(text=paste("require(",package,")")))) return True

  install.packages(package)
  return eval(parse(text=paste("require(",package,")")))
}

このメソッドの欠点は、パッケージ名を引用符で囲んで渡す必要があることですrequire。これは、実際には行いません。


4
character.only = TRUEin を使用することで人生を大幅に簡略化できますrequireが、私の答えと私が区別するものは何もないと思います。
Simon O'Hanlon、2013年

これは見栄えは良いですが、少なくとも私にとってはうまくいかないようです。この堅牢なバージョンを試したところ、Rが何らかの理由で「Return True」と「Return eval」を処理する方法を知らないため、2つのエラーメッセージが表示されます。したがって、ライブラリにパッケージが存在する場合はパッケージをロードし、それ以外の場合はパッケージをインストール(および後でロード)するこのような関数が本当に必要です。理想的には、これをデフォルトとして使用してパッケージをロードします。少なくともそうすることには意味があり、時間を節約できるようです。
Fabian Habersack

23
if (!require('ggplot2')) install.packages('ggplot2'); library('ggplot2')

「ggplot2」はパッケージです。パッケージがインストールされているかどうかを確認し、インストールされていない場合はインストールします。次に、どのブランチを選択したかに関係なく、パッケージをロードします。


21

このソリューションは、パッケージ名の文字ベクトルを取得してそれらをロードするか、ロードが失敗した場合にそれらをインストールします。これは、requireこれを行うための戻り動作に依存しています...

require 必要なパッケージが利用可能かどうかを示す論理を(不可視に)返します

したがって、必要なパッケージをロードできたかどうかを簡単に確認でき、そうでない場合は依存関係とともにインストールできます。したがって、ロードするパッケージの文字ベクトルが与えられます...

foo <- function(x){
  for( i in x ){
    #  require returns TRUE invisibly if it was able to load package
    if( ! require( i , character.only = TRUE ) ){
      #  If package was not able to be loaded then re-install
      install.packages( i , dependencies = TRUE )
      #  Load package after installing
      require( i , character.only = TRUE )
    }
  }
}

#  Then try/install packages...
foo( c("ggplot2" , "reshape2" , "data.table" ) )

requireインストール後にもう一度電話しませんか?
krlmlr 2013年

@krlmlrいいえ、ifステートメントを評価するためには最初にを評価する必要requireがあるため、パッケージの副作用が利用可能な場合、その副作用としてパッケージがロードされます。
Simon O'Hanlon、2013年

1
SimonO101:krlmlrは、ifステートメントではへの呼び出しの後を意味していると思いinstall.packagesます。これは、実際にはそのパッケージをロードしないためです。しかし、(@ krlmlrに対して)このコードフラグメントは一度だけ呼び出されるのではないかと思います。パッケージが必要になるたびにこれを書くわけではありません。代わりに、事前に一度実行してrequire、必要に応じて通常どおり呼び出します。
アーロンは2013年

@Aaronああ、そうです、私はあなたが何を意味しているのかを理解しています。インストール後のロードについてより明確になるように少し編集します。
Simon O'Hanlon、2013年

1
2番目requireの呼び出しを呼び出してlibrary、何らかの理由でまだパッケージを添付できない場合に騒々しく失敗するようにした方がいいのではないでしょうか。
kabdulla

18

上記の回答の多く(およびこの質問の重複)installed.packagesは、どちらが悪い形式であるかに依存しています。ドキュメントから:

数千のパッケージがインストールされている場合、これは遅くなる可能性があるため、これを使用して、名前付きパッケージがインストールされているかどうか(system.fileまたはfind.packageを使用)を調べたり、パッケージが使用可能かどうかを調べたりしないでください(requireを呼び出して、戻り値)また、少数のパッケージの詳細を見つけることもできません(packageDescriptionを使用)。インストールされたパッケージごとにいくつかのファイルを読み取る必要があります。これは、Windowsおよび一部のネットワークマウントファイルシステムでは遅くなります。

したがって、より良いアプローチは、とを使用requireしてパッケージのロードを試み、ロードが失敗した場合にインストールすることです(見つからない場合requireは戻りFALSEます)。私はこの実装を好みます:

using<-function(...) {
    libs<-unlist(list(...))
    req<-unlist(lapply(libs,require,character.only=TRUE))
    need<-libs[req==FALSE]
    if(length(need)>0){ 
        install.packages(need)
        lapply(need,require,character.only=TRUE)
    }
}

これは次のように使用できます:

using("RCurl","ggplot2","jsonlite","magrittr")

このようにして、すべてのパッケージをロードしてから、戻って不足しているすべてのパッケージをインストールします(必要な場合は、ユーザーがパッケージをインストールするかどうかを尋ねるプロンプトを挿入するのに便利です)。install.packagesパッケージごとに個別に呼び出すのではなく、アンインストールされたパッケージのベクトル全体を一度だけ渡します。

これは同じ機能ですが、ユーザーが不足しているパッケージをインストールするかどうかを尋ねるウィンドウダイアログが表示されます

using<-function(...) {
    libs<-unlist(list(...))
    req<-unlist(lapply(libs,require,character.only=TRUE))
    need<-libs[req==FALSE]
    n<-length(need)
    if(n>0){
        libsmsg<-if(n>2) paste(paste(need[1:(n-1)],collapse=", "),",",sep="") else need[1]
        print(libsmsg)
        if(n>1){
            libsmsg<-paste(libsmsg," and ", need[n],sep="")
        }
        libsmsg<-paste("The following packages could not be found: ",libsmsg,"\n\r\n\rInstall missing packages?",collapse="")
        if(winDialog(type = c("yesno"), libsmsg)=="YES"){       
            install.packages(need)
            lapply(need,require,character.only=TRUE)
        }
    }
}

これはかなりエレガントな方法で、受け入れられている方法よりもはるかに優れています。個人のライブラリーに入れます。ありがとう。
Bing

15

Shaneの答えは本当に良いですが、私のプロジェクトの1つでは、出力メッセージ、警告を削除し、パッケージを自動的にインストールする必要がありました。ようやくこのスクリプトを取得できました。

InstalledPackage <- function(package) 
{
    available <- suppressMessages(suppressWarnings(sapply(package, require, quietly = TRUE, character.only = TRUE, warn.conflicts = FALSE)))
    missing <- package[!available]
    if (length(missing) > 0) return(FALSE)
    return(TRUE)
}

CRANChoosen <- function()
{
    return(getOption("repos")["CRAN"] != "@CRAN@")
}

UsePackage <- function(package, defaultCRANmirror = "http://cran.at.r-project.org") 
{
    if(!InstalledPackage(package))
    {
        if(!CRANChoosen())
        {       
            chooseCRANmirror()
            if(!CRANChoosen())
            {
                options(repos = c(CRAN = defaultCRANmirror))
            }
        }

        suppressMessages(suppressWarnings(install.packages(package)))
        if(!InstalledPackage(package)) return(FALSE)
    }
    return(TRUE)
}

使用する:

libraries <- c("ReadImages", "ggplot2")
for(library in libraries) 
{ 
    if(!UsePackage(library))
    {
        stop("Error!", library)
    }
}

9
# List of packages for session
.packages = c("ggplot2", "plyr", "rms")

# Install CRAN packages (if not already installed)
.inst <- .packages %in% installed.packages()
if(length(.packages[!.inst]) > 0) install.packages(.packages[!.inst])

# Load packages into session 
lapply(.packages, require, character.only=TRUE)

6

これがrbundlerパッケージの目的です。特定のプロジェクトにインストールされるパッケージを制御する方法を提供します。現在、パッケージはdevtools機能と連携してパッケージをプロジェクトのディレクトリにインストールします。機能はRubyのbundlerに似ています。

プロジェクトがパッケージ(推奨)の場合は、rbundlerをロードしてパッケージをバンドルするだけです。bundle関数は、あなたのパッケージのを見ていきますDESCRIPTIONバンドルするパッケージを判断するには、ファイル。

library(rbundler)
bundle('.', repos="http://cran.us.r-project.org")

これで、パッケージは.Rbundleディレクトリにインストールされます。

プロジェクトがパッケージではない場合、プロジェクトDESCRIPTIONのルートディレクトリに、インストールするパッケージをリストするDependsフィールドを含むファイルを作成することで、プロジェクトを偽造できます(オプションのバージョン情報を含む)。

Depends: ggplot2 (>= 0.9.2), arm, glmnet

貢献に興味がある場合のプロジェクトのgithubリポジトリは次のとおりです:rbundler


5

承知しました。

「インストール済みパッケージ」と「必要なパッケージ」を比較する必要があります。「保存されている既知のパッケージ」と「現在既知のパッケージ」を比較して、新しいパッケージや更新されたパッケージを判別する必要があるため、これはCRANberryで行うことと非常にています。

だから何かのような

AP <- available.packages(contrib.url(repos[i,"url"]))   # available t repos[i]

すべての既知のパッケージを取得するには、現在インストールされているパッケージを同様に呼び出し、それを特定のターゲットパッケージセットと比較します。


5

packrat共有ライブラリがまったく同じで、他の環境を変更しないように使用します。

エレガンスとベストプラクティスに関しては、基本的には間違った方向に進んでいると思います。パッケージpackratはこれらの問題のために設計されました。Hadley WickhamによってRStudioによって開発されました。依存関係をインストールし、おそらく誰かの環境システムを台無しにする代わりにpackrat、独自のディレクトリを使用して、そこにプログラムのすべての依存関係をインストールし、誰かの環境に触れないようにします。

PackratはRの依存関係管理システムです。

Rパッケージの依存関係はイライラすることがあります。他の誰かのコードを機能させるためにインストールする必要のあるRパッケージを試行錯誤して把握する必要があり、それらのパッケージがグローバルにインストールされたままにされたままになったことがあります。 ?パッケージを更新して、プロジェクトの1つでコードを機能させることができましたが、更新されたパッケージによって別のプロジェクトのコードが機能しなくなったことがわかりましたか?

これらの問題を解決するためにpackratをビルドしました。packratを使用して、Rプロジェクトをさらに作成します。

  • 分離:1つのプロジェクトに新しいパッケージまたは更新されたパッケージをインストールしても、他のプロジェクトが破損することはなく、その逆も同様です。これは、packratが各プロジェクトに独自のプライベートパッケージライブラリを提供するためです。
  • ポータブル:異なるプラットフォーム間でも、プロジェクトをコンピュータ間で簡単に転送できます。Packratを使用すると、プロジェクトが依存するパッケージを簡単にインストールできます。
  • 再現性:Packratは、依存する正確なパッケージバージョンを記録し、それらの正確なバージョンがどこにでもインストールされるバージョンであることを保証します。

https://rstudio.github.io/packrat/


4

次の単純な関数はチャームのように機能します。

  usePackage<-function(p){
      # load a package if installed, else load after installation.
      # Args:
      #   p: package name in quotes

      if (!is.element(p, installed.packages()[,1])){
        print(paste('Package:',p,'Not found, Installing Now...'))
        install.packages(p, dep = TRUE)}
      print(paste('Loading Package :',p))
      require(p, character.only = TRUE)  
    }

(私のものではありません。しばらく前にWebでこれを見つけ、それ以来使用していました。元のソースが不明です)


4

require("<package>")パッケージが見つからないというエラーで終了する場合、次の関数を使用してパッケージをインストールします。欠落しているパッケージがないかCRANとBioconductorリポジトリの両方を照会します。

Joshua Wileyによるオリジナルの作品から転載、 http://r.789695.n4.nabble.com/Install-package-automatically-if-not-there-td2267532.html

install.packages.auto <- function(x) { 
  x <- as.character(substitute(x)) 
  if(isTRUE(x %in% .packages(all.available=TRUE))) { 
    eval(parse(text = sprintf("require(\"%s\")", x)))
  } else { 
    #update.packages(ask= FALSE) #update installed packages.
    eval(parse(text = sprintf("install.packages(\"%s\", dependencies = TRUE)", x)))
  }
  if(isTRUE(x %in% .packages(all.available=TRUE))) { 
    eval(parse(text = sprintf("require(\"%s\")", x)))
  } else {
    source("http://bioconductor.org/biocLite.R")
    #biocLite(character(), ask=FALSE) #update installed packages.
    eval(parse(text = sprintf("biocLite(\"%s\")", x)))
    eval(parse(text = sprintf("require(\"%s\")", x)))
  }
}

例:

install.packages.auto(qvalue) # from bioconductor
install.packages.auto(rNMF) # from CRAN

PS:update.packages(ask = FALSE)biocLite(character(), ask=FALSE)は、システムにインストールされているすべてのパッケージを更新します。これには長い時間がかかる可能性があり、完全なRアップグレードと見なすことができます。


パッケージがクランまたはbcで実際に利用可能かどうかを確認することで改善できます。また、インストールが失敗した場合やパッケージが存在しない場合は、最後にライブラリを使用してエラーをスローする必要があります。raw.githubusercontent.com/holgerbrandl/datautils/master/R/…で呼び出さloadpack()れた私の改良版を参照してください
Holger Brandl

4

setdiff関数を使用して、インストールされていないパッケージを取得し、インストールすることができます。以下のサンプルでは、ggplot2およびRcppパッケージがインストールされる前に、それらがインストールされているかどうかを確認します。

unavailable <- setdiff(c("ggplot2", "Rcpp"), rownames(installed.packages()))
install.packages(unavailable)

1行で、上記は次のように記述できます。

install.packages(setdiff(c("ggplot2", "Rcpp"), rownames(installed.packages())))

私は同じアプローチを使用します。のinstalled.packages()[,'Package']代わりに使用することもできますrownames(installed.packages())
Scudelletti、2017年

3

必要なRパッケージをサイレントでインストールおよびロードする機能を実装しました。願っています。これがコードです:

# Function to Install and Load R Packages
Install_And_Load <- function(Required_Packages)
{
    Remaining_Packages <- Required_Packages[!(Required_Packages %in% installed.packages()[,"Package"])];

    if(length(Remaining_Packages)) 
    {
        install.packages(Remaining_Packages);
    }
    for(package_name in Required_Packages)
    {
        library(package_name,character.only=TRUE,quietly=TRUE);
    }
}

# Specify the list of required packages to be installed and load    
Required_Packages=c("ggplot2", "Rcpp");

# Call the Function
Install_And_Load(Required_Packages);

3

次のバージョンのRStudio(1.2)はすでにプレビューとして利用可能で、欠落しているパッケージlibrary()require()呼び出しを検出し、ユーザーにインストールを促す機能が含まれます。

不足しているRパッケージを検出する

多くのRスクリプトはへの呼び出しで開くlibrary()require()、彼らが実行するために必要なパッケージをロードします。インストールしていないパッケージを参照するRスクリプトを開くと、RStudioは必要なすべてのパッケージを1回のクリックでインストールできるようにします。install.packages()エラーがなくなるまで繰り返し入力する必要はありません。
https://blog.rstudio.com/2018/11/19/rstudio-1-2-preview-the-little-things/

これは、OPの当初の懸念に特によく対応しているようです。

それらの多くは初心者/中級Rユーザーであり、まだ持っていないパッケージをインストールする必要があることを理解していません。


2

あなたの主な目的については、「それらがまだ持っていないライブラリをインストールすることについて」、そして「instllaed.packages()」の使用に関係なく。次の関数は、requireの元の関数をマスクします。名前付きパッケージ "x"をロードしてチェックしようとします。インストールされていない場合は、依存関係を含めて直接インストールします。最後に通常どおりにロードします。整合性を維持するために、関数名を「require」から「library」に変更します。唯一の制限は、パッケージ名を引用する必要があることです。

require <- function(x) { 
  if (!base::require(x, character.only = TRUE)) {
  install.packages(x, dep = TRUE) ; 
  base::require(x, character.only = TRUE)
  } 
}

したがって、Rの古い方法でパッケージをロードしてインストールできます。require( "ggplot2")require( "Rcpp")


回答が気に入らなくなった場合は、破壊しないでください。削除してください。
Michael Petrotta 2013年

さて、試しましたができませんでした。私のFFのNoScript拡張機能が無効にしているか、自分の回答を削除する権利とクレジットを持っていません。LoLしかし、私はLiviusが私の答えにかなり近いと思います。マスキングなしで考えました。Michael Petrottaに感謝します。通知のため。
GeoObserver 2013年

deleteこれらのコメントの上にリンクが表示されます。削除せずに削除したい場合は、flagリンクを使用して「その他」を選択し、回答の削除をモデレーターに説明してください。
Michael Petrotta 2013年

2

かなり基本的なもの。

pkgs = c("pacman","data.table")
if(length(new.pkgs <- setdiff(pkgs, rownames(installed.packages())))) install.packages(new.pkgs)

2

私が使用するものを寄付すると思いました:

testin <- function(package){if (!package %in% installed.packages())    
install.packages(package)}
testin("packagename")

2
source("https://bioconductor.org/biocLite.R")
if (!require("ggsci")) biocLite("ggsci")

2

lapplyファミリと無名関数アプローチを使用すると、次のことができます。

  1. リストされているすべてのパッケージを添付してみてください。
  2. 不足しているもののみをインストールします(||遅延評価を使用)。
  3. 手順1で見つからず、手順2でインストールされたものを再度接続してみます。
  4. 各パッケージの最終ロードステータス(TRUE/ FALSE)を出力します。

    req <- substitute(require(x, character.only = TRUE))
    lbs <- c("plyr", "psych", "tm")
    sapply(lbs, function(x) eval(req) || {install.packages(x); eval(req)})
    
    plyr psych    tm 
    TRUE  TRUE  TRUE 

1

次のコマンドを使用して、パッケージがインストールされているかどうか、依存関係が更新されているかどうかを確認し、パッケージをロードします。

p<-c('ggplot2','Rcpp')
install_package<-function(pack)
{if(!(pack %in% row.names(installed.packages())))
{
  update.packages(ask=F)
  install.packages(pack,dependencies=T)
}
 require(pack,character.only=TRUE)
}
for(pack in p) {install_package(pack)}

completeFun <- function(data, desiredCols) {
  completeVec <- complete.cases(data[, desiredCols])
  return(data[completeVec, ])
}

1

これが私のコードです:

packages <- c("dplyr", "gridBase", "gridExtra")
package_loader <- function(x){
    for (i in 1:length(x)){
        if (!identical((x[i], installed.packages()[x[i],1])){
            install.packages(x[i], dep = TRUE)
        } else {
            require(x[i], character.only = TRUE)
        }
    }
}
package_loader(packages)

1
 48 lapply_install_and_load <- function (package1, ...)
 49 {
 50     #
 51     # convert arguments to vector
 52     #
 53     packages <- c(package1, ...)
 54     #
 55     # check if loaded and installed
 56     #
 57     loaded        <- packages %in% (.packages())
 58     names(loaded) <- packages
 59     #
 60     installed        <- packages %in% rownames(installed.packages())
 61     names(installed) <- packages
 62     #
 63     # start loop to determine if each package is installed
 64     #
 65     load_it <- function (p, loaded, installed)
 66     {
 67         if (loaded[p])
 68         {
 69             print(paste(p, "loaded"))
 70         }
 71         else
 72         {
 73             print(paste(p, "not loaded"))
 74             if (installed[p])
 75             {
 76                 print(paste(p, "installed"))
 77                 do.call("library", list(p))
 78             }
 79             else
 80             {
 81                 print(paste(p, "not installed"))
 82                 install.packages(p)
 83                 do.call("library", list(p))
 84             }
 85         }
 86     }
 87     #
 88     lapply(packages, load_it, loaded, installed)
 89 }

1
library <- function(x){
  x = toString(substitute(x))
if(!require(x,character.only=TRUE)){
  install.packages(x)
  base::library(x,character.only=TRUE)
}}

これは引用符で囲まれていないパッケージ名で機能し、かなりエレガントです(GeoObserverの回答を参照)


1

私の場合、コマンドラインから(実際にはMakefileを介して)実行できる1つのライナーが必要でした。以下は、「VGAM」と「feather」がまだインストールされていない場合のインストール例です。

R -e 'for (p in c("VGAM", "feather")) if (!require(p, character.only=TRUE)) install.packages(p, repos="http://cran.us.r-project.org")'

R内からは次のようになります。

for (p in c("VGAM", "feather")) if (!require(p, character.only=TRUE)) install.packages(p, repos="http://cran.us.r-project.org")

ここでは、以下の点を除いて、以前のソリューション以外に何もありません。

  • 単一行に保つ
  • reposパラメータをハードコーディングします(使用するミラーについて尋ねるポップアップを回避するため)
  • 他の場所で使用する関数を定義する必要はありません

また、重要な点にも注意してくださいcharacter.only=TRUE(これがないと、requireはパッケージをロードしようとしますp)。


0
  packages_installed <- function(pkg_list){
        pkgs <- unlist(pkg_list)
        req <- unlist(lapply(pkgs, require, character.only = TRUE))
        not_installed <- pkgs[req == FALSE]
        lapply(not_installed, install.packages, 
               repos = "http://cran.r-project.org")# add lib.loc if needed
        lapply(pkgs, library, character.only = TRUE)
}

0

少し狂気を共有しましょう:

c("ggplot2","ggsci", "hrbrthemes", "gghighlight", "dplyr") %>%  # What will you need to load for this script?
  (function (x) ifelse(t =!(x %in% installed.packages()), 
    install.packages(x[t]),
    lapply(x, require))) 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.