[英]Elegant way to load a string list of packages in R
嗨,我已经编写了以下代码:
################# Loadin Require Libraries #################
required.packages <- c('caret','readxl')
for (pkg in required.packages){
if(!require(pkg, character.only = T)){
install.packages(pkg,
character.only = T,
dependencies = T)
library(pkg, character.only = T)
}else{
library(pkg, character.only = T)
}
}
该代码应在对等方的计算机上运行,因此为了处理可能丢失的库,我认为我迭代抛出了一个字符串列表,以检查是否安装了包(如果是)-> 如果没有,则加载-> 然后安装并加载。 但是,当包不可用时,R 仍然会发出警告消息:警告消息:
在 library(package, lib.loc = lib.loc, character.only = TRUE, logical.return = TRUE, : es gibt kein Paket namens 'readxl'
我的问题:有没有更好的方法来检查/安装 R 中的一堆库? 我应该关心警告吗? 如果不重要,有没有办法抑制打印此警告?
编辑:最终解决方案感谢@akrun 提供的正确答案:
################# Loadin Require Libraries #################
lib <- .libPaths()[1]
required.packages <- c('caret','readxl')
i1 <- !(required.packages %in% row.names(installed.packages()))
if(any(i1)) {
install.packages(required.packages[i1], dependencies = TRUE, lib = lib)
}
lapply(required.packages, require, character.only = TRUE)
我发现 pacman - 包对于这个目的真的很有帮助,尤其是p_load 函数。 它检查包是否已安装,否则会尝试安装缺少的包。
此函数是 library 和 require 的包装器。 它会检查是否安装了软件包,如果没有,它会尝试从 CRAN 和/或 pacman 存储库列表中的任何其他存储库安装该软件包。
所以现在我用以下几行开始我所有需要“可移植”的脚本:
require(pacman)
# Load / Install Required Packages
p_load(dplyr, tidyr, gridExtra, psych)
在这种情况下加载/安装dplyr
、 tidyr
、 gridExtra
和psych
这个包也不错(如果你想清理环境)p_unload
# Unload All packages
p_unload()
这是一种选择
Pkgs <- c('caret','readxl')
lib <- .libPaths()[1]
i1 <- !(Pkgs %in% row.names(installed.packages()))
if(any(i1)) {
install.packages(Pkgs[i1], dependencies = TRUE, lib = lib)
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.