17

Rスクリプトは、複数のコンピューターの複数のユーザーで使用されるため、各コンピューターにパッケージがインストールされる際に偏差があります。各スクリプトがすべてのユーザーに対して機能することを確認するために、関数pkgLoadを定義します。この関数は、起動メッセージが抑制されたライブラリをロードする前に、パッケージがローカルにインストールされているかどうかを最初にテストします。install.packages()を実行する前に、インストール済みパッケージのチェックをガイドとして使用して、試してみました

 pkgLoad <- function(x)
  {
    if (!require(x,character.only = TRUE))
    {
      install.packages(x,dep=TRUE, repos='http://star-www.st-andrews.ac.uk/cran/')
      if(!require(x,character.only = TRUE)) stop("Package not found")
    }
    #now load library and suppress warnings
    suppressPackageStartupMessages(library(x))
    library(x)
  }

pkgLoad( "ggplot2")を使用してggplot2を読み込もうとすると、ターミナルに次のエラーメッセージが表示されます。

貼り付けエラー( "package"、package、sep = ":"):オブジェクト'ggplot2'が見つかりません>pkgLoad( "ggplot2")必要なパッケージの読み込み:ggplot2ライブラリ(x)のエラー:'x'と​​いうパッケージがありません> pkgLoad( "ggplot2")library(x)のエラー:「x」というパッケージがありません</ p>

xがggplot2からプレーンな古いxに変わる理由は何ですか?

4

6 に答える 6

16

先日、この関数を書いてみたら便利だと思いました...

install_load <- function (package1, ...)  {   

   # convert arguments to vector
   packages <- c(package1, ...)

   # start loop to determine if each package is installed
   for(package in packages){

       # if package is installed locally, load
       if(package %in% rownames(installed.packages()))
          do.call('library', list(package))

       # if package is not installed locally, download, then load
       else {
          install.packages(package)
          do.call("library", list(package))
       }
   } 
}
于 2014-02-28T13:21:18.483 に答える
13

私が維持しているCRANpacmanパッケージは、これにうまく対処できます。次のヘッダーを使用して(pacmanが最初にインストールされていることを確認するため)、p_loadRがパッケージをロードできない場合、関数はパッケージをロードしてからCRANから取得しようとします。

if (!require("pacman")) install.packages("pacman"); library(pacman)
p_load(qdap, ggplot2, fakePackage, dplyr, tidyr)
于 2015-05-11T18:15:38.817 に答える
7

を使用しlibrary(x,character.only=TRUE)ます。suppressPackageStartupMessages(library(x,character.only=TRUE))また、すでにパッケージがロードされているため、最後の行は必要ありません 。

編集:@LarsKotthoffは正しいです、あなたはすでにifブラケットの中にパッケージをロードしています。そこではすでにオプションcharacter.only=TRUEを使用しているので、関数本体の最後の行を削除するだけですべてがうまくいきます。

于 2013-03-01T11:27:07.347 に答える
3

この素晴らしい関数を見てください: klick

于 2013-03-01T11:04:05.083 に答える
2

以下を使用できます。

check.and.install.Package<-function(package_name){
    if(!package_name%in%installed.packages()){
        install.packages(package_name)
    }
}

check.and.install.Package("RTextTools")
check.and.install.Package("e1071")
于 2017-09-09T13:40:36.003 に答える
1

@maloneypatr関数は正常に機能しますが、非常に静かで、ロードされたパッケージの成功に応答しません。以下の関数を作成しました。この関数は、ユーザーエントリをチェックし、正常にインストールされたパッケージの数にも応答します。

lubripack <- function(...,silent=FALSE){

  #check names and run 'require' function over if the given package is installed
  requirePkg<- function(pkg){if(length(setdiff(pkg,rownames(installed.packages())))==0)
                                    require(pkg, quietly = TRUE,character.only = TRUE)
                            }

  packages <- as.vector(unlist(list(...)))
  if(!is.character(packages))stop("No numeric allowed! Input must contain package names to install and load")

  if (length(setdiff(packages,rownames(installed.packages()))) > 0 )
     install.packages(setdiff(packages,rownames(installed.packages())),
                      repos = c("https://cran.revolutionanalytics.com/", "http://owi.usgs.gov/R/"))

  res<- unlist(sapply(packages, requirePkg))

  if(silent == FALSE && !is.null(res)) {cat("\nBellow Packages Successfully Installed:\n\n")
                    print(res)
                   }
}

注1:

(すべて大文字でサイレント)場合silent = TRUE、レポートなしでパッケージをインストールおよびロードします。の場合silent = FALSE、パッケージのインストールが成功したことを報告します。デフォルト値はsilent = FALSE

使い方

lubripack(“pkg1","pkg2",.,.,.,.,"pkg")

例1:すべてのパッケージが有効で、モードがサイレントでない場合

lubripack(“shiny","ggvis")

また

lubripack(“shiny","ggvis", silent = FALSE)

出力

ここに画像の説明を入力してください

例2:すべてのパッケージが有効で、モードがサイレントの場合

lubripack(“caret","ggvis","tm", silent = TRUE) 

出力2

ここに画像の説明を入力してください

例3:パッケージが見つからない場合

lubripack(“shiny","ggvis","invalidpkg", silent=FALSE) 

出力3

ここに画像の説明を入力してください


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

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

library(devtools)
install_github("espanta/lubripack")
于 2016-04-23T14:46:40.100 に答える