web-dev-qa-db-ja.com

複数のパッケージを一度にロードする

Requireコマンドを何度も再入力せずに、一度に多数のパッケージをロードするにはどうすればよいですか?私は3つのアプローチを試してみましたが、いずれもクラッシュと書き込みです。

基本的に、パッケージ名のベクトルをロードする関数に提供したいと思います。

x<-c("plyr", "psych", "tm")

require(x)
lapply(x, require)
do.call("require", x)
152
Tyler Rinker

提案された関数のいくつかの組み合わせは機能しますが、character.only引数をTRUEに指定した場合のみです。簡単な例:

lapply(x, require, character.only = TRUE)
221
daroczig

CRANパッケージpacman私が管理している(Dason Kurkiewiczが作成)これを実現できます:

したがって、ユーザーは次のことができます。

## install.packages("pacman")
pacman::p_load(dplyr, psych, tm) 

パッケージが欠落している場合、p_loadはCRANまたはBioconductorからダウンロードします。

50
Tyler Rinker

これでうまくいくはずです:

lapply(x, FUN = function(X) {
    do.call("require", list(X)) 
})

(重要な点は、do.call(what, args)args引数がmustリストである---要素が1つしかない場合でもです!)

23
Josh O'Brien

パッケージを同時にインストールしてロードしたい人のために、以下のリンクでこの機能に出会いました https://Gist.github.com/stevenworthington/317816

# ipak function: install and load multiple R packages.
# check to see if packages are installed. Install them if they are not, then load them into the R session.

ipak <- function(pkg){
new.pkg <- pkg[!(pkg %in% installed.packages()[, "Package"])]
if (length(new.pkg)) 
    install.packages(new.pkg, dependencies = TRUE)
sapply(pkg, require, character.only = TRUE)
}

# usage
packages <- c("ggplot2", "plyr", "reshape2", "RColorBrewer", "scales", "grid")
ipak(packages)
11
bala

代替オプションはパッケージeasypackagesから来ます。インストールしたら、最も直感的な方法でパッケージをロードできます。

libraries("plyr", "psych", "tm")

パッケージには、いくつかのパッケージをインストールする機能も含まれています。

packages("plyr", "psych", "tm")

参照 ここ

7
luchonacho

Lubripackパッケージを使用するだけで、新しいパッケージがきれいにインストールされ、すべてのパッケージが1行でロードされます。

lubripack("plyr", "psych", "tm")

RStudioで上記のコードを実行した後の出力を次に示します。

enter image description here

パッケージのインストール方法:

以下のコードを実行してパッケージをダウンロードし、GitHubからインストールします。 GitHubアカウントは必要ありません。

library(devtools)
install_github("espanta/lubripack")
4
Espanta

リストを入力として指定したくない場合は、使用できるdaroczigのソリューションに基づいて

# Foo
mLoad <- function(...) {
  sapply(sapply(match.call(), as.character)[-1], require, character.only = TRUE)
}

# Example 
mLoad(plyr, dplyr, data.table)

...より短い

lapply(list('plyr', 'dplyr', 'data.table'), require, character.only = TRUE)
3
goclem

私は次の機能を使用します。

mrip <- function(..., install = TRUE){
    reqFun <- function(pack) {
        if(!suppressWarnings(suppressMessages(require(pack, character.only = TRUE)))) {
            message(paste0("unable to load package ", pack,
                           ": attempting to download & then load"))
            install.packages(pack)
            require(pack, character.only = TRUE)
        }
    }
    lapply(..., reqFun)
}

これはロードを試行し、失敗した場合はインストールしてから、再度ロードを試行します。

2
ricardo

Pacmanをインストールして読み込むためのチェックを追加するためのタイラーリンカーの答えのわずかなmod:

#Install/load pacman
if(!require(pacman)){install.packages("pacman");require(pacman)}
#Install/load tons of packages
p_load(plyr,psych,tm)

P_loadソリューションは、引用符を使用しないため、気に入っています。

0
mattador

@daroczigが提供するコードは、requirelibraryに置き換え、invisible()関数内でlapply呼び出しをラップすることで改善できると思います。したがって、改善されたコードは次のようになります。

invisible(lapply(x, library, character.only = TRUE))

このコードは次の理由で改善されています。

  1. library()は通常、パッケージをロードするためにrequire()よりも好まれます。前者はパッケージがインストールされていない場合にエラーを表示し、後者は警告を表示するだけだからです。さらに、require()library()を呼び出すので、library()を直接使用しないでください。

    library("time")
    # Error in library("time") : there is no package called ‘time’
    
    require("time")
    # Loading required package: time
    # Warning message:
    # In library(package, lib.loc = lib.loc, character.only = TRUE, logical.return = TRUE,  :
    # there is no package called ‘time’
    
  2. この場合、lapply()呼び出しによって返されて出力されるリストオブジェクトは意味がないため、出力を非表示にすることは理にかなっています。分析作業にRノートブックを使用するとします。invisible()関数を使用すると、リストオブジェクトの内容が抑制され、レンダリングされたノートブックファイルの乱雑さが防止されます。

0
Ashirwad