我有一个R脚本,与不同计算机上的多个用户共享.其中一行包含install.packages("xtable")
命令.
问题是,每次有人运行脚本时,R都会花费大量时间显然重新安装软件包(实际上确实需要一些时间,因为实际案例中有几个软件包的向量).
如何首先检查软件包是否已安装,然后仅install.packages()
针对那些软件包运行?
小智 142
尝试:require("xtable")
或"xtable" %in% rownames(installed.packages())
Sac*_*amp 48
这是我经常用来检查包的函数,否则安装它并再次加载:
pkgTest <- function(x)
{
if (!require(x,character.only = TRUE))
{
install.packages(x,dep=TRUE)
if(!require(x,character.only = TRUE)) stop("Package not found")
}
}
Run Code Online (Sandbox Code Playgroud)
像pkgTest("xtable")
.它仅在镜像设置时有效,但您可以在require
调用中输入该镜像.
Sea*_*phy 48
如果您想尽可能简单地做到:
packages <- c("ggplot2", "dplyr", "Hmisc", "lme4", "arm", "lattice", "lavaan")
if (length(setdiff(packages, rownames(installed.packages()))) > 0) {
install.packages(setdiff(packages, rownames(installed.packages())))
}
Run Code Online (Sandbox Code Playgroud)
将第一行中列出的包替换为运行代码所需的包,并vo!
Art*_*sov 12
我建议使用更轻量级的解决方案system.file
.
is_inst <- function(pkg) {
nzchar(system.file(package = pkg))
}
is_inst2 <- function(pkg) {
pkg %in% rownames(installed.packages())
}
library(microbenchmark)
microbenchmark(is_inst("aaa"), is_inst2("aaa"))
## Unit: microseconds
## expr min lq mean median uq max neval
## is_inst("aaa") 22.284 24.6335 42.84806 34.6815 47.566 252.568 100
## is_inst2("aaa") 1099.334 1220.5510 1778.57019 1401.5095 1829.973 17653.148 100
microbenchmark(is_inst("ggplot2"), is_inst2("ggplot2"))
## Unit: microseconds
## expr min lq mean median uq max neval
## is_inst("ggplot2") 336.845 386.660 459.243 431.710 483.474 867.637 100
## is_inst2("ggplot2") 1144.613 1276.847 1507.355 1410.054 1656.557 2747.508 100
Run Code Online (Sandbox Code Playgroud)
Nic*_*ton 10
requiredPackages = c('plyr','ggplot2','ggtern')
for(p in requiredPackages){
if(!require(p,character.only = TRUE)) install.packages(p)
library(p,character.only = TRUE)
}
Run Code Online (Sandbox Code Playgroud)
# Function to check whether package is installed
is.installed <- function(mypkg){
is.element(mypkg, installed.packages()[,1])
}
# check if package "hydroGOF" is installed
if (!is.installed("hydroGOF")){
install.packages("hydroGOF")
}
Run Code Online (Sandbox Code Playgroud)
我在packages
某个地方找到了一个脚本,我总是在每个脚本中加载我的库.它将完成您的所有库处理(下载,安装和加载),并且仅在需要时执行.
# Install function for packages
packages<-function(x){
x<-as.character(match.call()[[2]])
if (!require(x,character.only=TRUE)){
install.packages(pkgs=x,repos="http://cran.r-project.org")
require(x,character.only=TRUE)
}
}
packages(ggplot2)
packages(reshape2)
packages(plyr)
# etc etc
Run Code Online (Sandbox Code Playgroud)
我已经实现了静默安装和加载所需 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);
Run Code Online (Sandbox Code Playgroud)