我怎么能一次加载一堆包,而不需要一遍又一遍地键入要求命令?我尝试了三种方法,都失败了。

基本上,我想为一个函数提供一个包名向量,该函数将加载它们。

x<-c("plyr", "psych", "tm")

require(x)
lapply(x, require)
do.call("require", x)

当前回答

对于那些想要同时安装和加载包的人来说,我从这个链接中遇到了这个函数

# 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(需要安装)。你可以用最直观的方式加载包:

library("easypackages")
libraries("plyr", "psych", "tm")

该包还包括一个安装几个包的函数:

packages("plyr", "psych", "tm")

参考这里。

你所提议的函数的几种排列是可行的——但前提是你指定了字符。唯一的论点为真。简单的例子:

lapply(x, require, character.only = TRUE)

对于那些想要同时安装和加载包的人来说,我从这个链接中遇到了这个函数

# 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)

我使用以下函数:

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)
}

这将尝试加载,如果失败,则安装,然后尝试再次加载。

我维护的CRAN包pacman(与Dason Kurkiewicz合著)可以实现这一点:

所以用户可以这样做:

## install.packages("pacman")
pacman::p_load(dplyr, psych, tm) 

如果包丢失,p_load将从CRAN或Bioconductor下载它。