Подтвердить что ты не робот

Проверьте, установлен ли пакет R, затем загрузите библиотеку

Наши сценарии R используются для нескольких пользователей на нескольких компьютерах и, следовательно, существуют отклонения, в которых пакеты устанавливаются на каждом компьютере. Чтобы каждый script работал для всех пользователей, я хотел бы определить функцию 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)
  }

Когда я пытаюсь загрузить ggplot2 с помощью pkgLoad ( "ggplot2" ), я получаю следующее сообщение об ошибке в моем терминале

Error in paste("package", package, sep = ":") : 
  object 'ggplot2' not found
> pkgLoad("ggplot2")
Loading required package: ggplot2
Error in library(x) : there is no package called ‘x’
> pkgLoad("ggplot2")
Error in library(x) : there is no package called ‘x’

Любой, почему x изменяется от ggplot2 до простого старого x?

4b9b3361

Ответ 1

Используйте library(x,character.only=TRUE). Также вам не нужна последняя строка, поскольку suppressPackageStartupMessages(library(x,character.only=TRUE)) уже загружает пакет.

EDIT: @LarsKotthoff прав, вы уже загружаете пакет внутри скобок. Там вы уже используете опцию character.only = TRUE, поэтому все хорошо, если вы просто удаляете последнее в строках своего тела функции.

Ответ 2

Я написал эту функцию на днях, который, как я думал, будет полезен...

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))
       }
   } 
}

Ответ 3

Пакет CRAN pacman, который я поддерживаю, может справиться с этим красиво. Используя следующий заголовок (для обеспечения установки pacman), а затем функция p_load попытается загрузить пакет, а затем получить их из CRAN, если R не может загрузить пакет.

if (!require("pacman")) install.packages("pacman"); library(pacman)
p_load(qdap, ggplot2, fakePackage, dplyr, tidyr)

Ответ 4

Посмотрите на эту приятную функцию: klick

Ответ 5

Хотя функция @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")

Ответ 6

Можно использовать следующее:

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")