Answers:
建议的功能可以进行多种排列-但仅当您指定character.only
参数为时才有效TRUE
。快速示例:
lapply(x, require, character.only = TRUE)
x
?
lapply
本地添加了这个技巧,那就更好了library()
。很library(c("plyr", "umx"))
我维护的CRAN软件包pacman(由Dason Kurkiewicz撰写)可以完成此任务:
因此用户可以执行以下操作:
## install.packages("pacman")
pacman::p_load(dplyr, psych, tm)
如果缺少包装p_load
,请从CRAN或Bioconductor下载。
p_load
?更具描述性的名称(例如)load_packages
使功能的意图更加清晰。
p_
。另外,我们倾向于稍微使用库,这是额外的7个字符。功能的7个字符x〜1000000生命周期x每个字符0.5秒钟= 3500000秒。那是程序员一生的58333.33分钟,972.2222小时或40.50926天,我们已经回馈了他们:-)无论如何,我们的目标是在2月1日之前推向CRAN
p_
前缀的理由令人怀疑。如果问题是简洁,请p_
完全删除前缀。实际上,出于其他原因,通常不建议在其他语言中使用这样的前缀(我已经告诉Hadley,关于他fct_
在forcat中的废话,它们是相同的)。这是特别正确的,因为该软件包的预期用途是使用合格的名称空间(pacman::
)。
对于想同时安装和加载软件包的人,我从此链接中遇到了此功能
# ipak function: install and load multiple R packages.
# check to see if packages are installed. Install them if they are not, then load them into the R session.
ipak <- function(pkg){
new.pkg <- pkg[!(pkg %in% installed.packages()[, "Package"])]
if (length(new.pkg))
install.packages(new.pkg, dependencies = TRUE)
sapply(pkg, require, character.only = TRUE)
}
# usage
packages <- c("ggplot2", "plyr", "reshape2", "RColorBrewer", "scales", "grid")
ipak(packages)
另一种选择来自包装easypackages
。安装后,您可以以最直观的方式加载软件包:
libraries("plyr", "psych", "tm")
该软件包还包括安装多个软件包的功能:
packages("plyr", "psych", "tm")
参考这里。
library
是指软件包的安装位置:软件包库。通过加载多个软件包libraries
没有任何意义。拥有一个单独的函数packages
执行其他操作只会使情况变得更糟。我知道命名在软件工程中是一个难题,但确实如此。这些名字特别糟糕。
libraries
没有道理。它是的复数形式library
,并library
加载单个程序包;libraries
装载多个包装。如果您认为library
含义是“从单个库中加载”,并将其扩展为libraries
含义“从多个库中加载”,那么这也许是不直观的,但这并不是目的。我对这个名字会很满意libraries
。
您可以简单地使用lubripack软件包,它会整洁地安装新软件包,然后将它们全部装入一行。
lubripack("plyr", "psych", "tm")
这是您在RStudio中运行以上代码后的输出。
运行以下代码以下载软件包并从GitHub安装它。无需拥有GitHub帐户。
library(devtools)
install_github("espanta/lubripack")
我使用以下功能:
mrip <- function(..., install = TRUE){
reqFun <- function(pack) {
if(!suppressWarnings(suppressMessages(require(pack, character.only = TRUE)))) {
message(paste0("unable to load package ", pack,
": attempting to download & then load"))
install.packages(pack)
require(pack, character.only = TRUE)
}
}
lapply(..., reqFun)
}
这将尝试加载,如果安装失败,则再次尝试加载。
我认为@daroczig提供了通过更换可以提高代码require
与library
和包装的lapply
内部通话invisible()
功能。因此,改进后的代码将如下所示:
invisible(lapply(x, library, character.only = TRUE))
此代码得到改进,因为:
library()
通常优先require()
于加载软件包,因为如果未安装软件包,前者会提示错误,而后者会给出警告。而且,require()
打电话library()
,所以为什么不直接使用library()
!
library("time")
# Error in library("time") : there is no package called ‘time’
require("time")
# Loading required package: time
# Warning message:
# In library(package, lib.loc = lib.loc, character.only = TRUE, logical.return = TRUE, :
# there is no package called ‘time’
lapply()
在这种情况下,调用返回并打印的列表对象没有意义,因此使输出不可见是有意义的。假设您使用R Notebook进行分析工作,则使用该invisible()
函数将抑制列表对象的内容并防止渲染的笔记本文件混乱。