Проверьте, установлен ли пакет 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?
Ответы
Ответ 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")