繁体   English   中英

在 R 中加载包的字符串列表的优雅方式

[英]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)

2021 年更新 - 吃豆子

我发现 pacman - 包对于这个目的真的很有帮助,尤其是p_load 函数 它检查包是否已安装,否则会尝试安装缺少的包。

此函数是 library 和 require 的包装器。 它会检查是否安装了软件包,如果没有,它会尝试从 CRAN 和/或 pacman 存储库列表中的任何其他存储库安装该软件包。

所以现在我用以下几行开始我所有需要“可移植”的脚本:

require(pacman)  
# Load / Install Required Packages
p_load(dplyr, tidyr, gridExtra, psych)

在这种情况下加载/安装dplyrtidyrgridExtrapsych

这个包也不错(如果你想清理环境)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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM