我怎么能一次加载一堆包,而不需要一遍又一遍地键入要求命令?我尝试了三种方法,都失败了。
基本上,我想为一个函数提供一个包名向量,该函数将加载它们。
x<-c("plyr", "psych", "tm")
require(x)
lapply(x, require)
do.call("require", x)
我怎么能一次加载一堆包,而不需要一遍又一遍地键入要求命令?我尝试了三种方法,都失败了。
基本上,我想为一个函数提供一个包名向量,该函数将加载它们。
x<-c("plyr", "psych", "tm")
require(x)
lapply(x, require)
do.call("require", x)
当前回答
这应该可以达到目的:
lapply(x, FUN = function(X) {
do.call("require", list(X))
})
(关键是do中的args参数。Call (what, args)必须是一个列表——即使它只有一个元素!)
其他回答
我维护的CRAN包pacman(与Dason Kurkiewicz合著)可以实现这一点:
所以用户可以这样做:
## install.packages("pacman")
pacman::p_load(dplyr, psych, tm)
如果包丢失,p_load将从CRAN或Bioconductor下载它。
您可以简单地使用lubripack包,它整齐地安装新包,然后在一行中加载所有这些包。
lubripack("plyr", "psych", "tm")
下面是在RStudio中运行上述代码后的输出。
软件包安装方法:
运行下面的代码下载包并从GitHub安装。不需要有GitHub帐户。
library(devtools)
install_github("espanta/lubripack")
基于daroczig的解决方案,如果不想指定一个列表作为输入,可以使用
# Foo
mLoad <- function(...) {
sapply(sapply(match.call(), as.character)[-1], require, character.only = TRUE)
}
# Example
mLoad(plyr, dplyr, data.table)
... 它比
lapply(list('plyr', 'dplyr', 'data.table'), require, character.only = TRUE)
另一个选项来自软件包easypackages(需要安装)。你可以用最直观的方式加载包:
library("easypackages")
libraries("plyr", "psych", "tm")
该包还包括一个安装几个包的函数:
packages("plyr", "psych", "tm")
参考这里。
我使用以下函数:
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)
}
这将尝试加载,如果失败,则安装,然后尝试再次加载。