如何在不重复重复输入require命令的情况下一次加载一堆包?我尝试了三种方法,所有这些方法都会崩溃并烧毁.
基本上,我想为一个将加载它们的函数提供包名称的向量.
x<-c("plyr", "psych", "tm")
require(x)
lapply(x, require)
do.call("require", x)
Run Code Online (Sandbox Code Playgroud)
dar*_*zig 231
您提出的函数的几种排列确实有效 - 但只有在您指定character.only参数时才有效TRUE.快速举例:
lapply(x, require, character.only = TRUE)
Run Code Online (Sandbox Code Playgroud)
Tyl*_*ker 52
我维护的CRAN包pacman(与Dason Kurkiewicz合着)可以做到这一点:
所以用户可以这样做:
## install.packages("pacman")
pacman::p_load(dplyr, psych, tm)
Run Code Online (Sandbox Code Playgroud)
如果包丢失p_load,将从CRAN或Bioconductor下载.
Jos*_*ien 24
这应该做的伎俩:
lapply(x, FUN = function(X) {
do.call("require", list(X))
})
Run Code Online (Sandbox Code Playgroud)
(关键是args参数do.call(what, args) 必须是一个列表---即使它只有一个元素!)
小智 12
对于想要同时安装和加载软件包的人,我在下面的链接中看到了这个功能 :https://gist.github.com/stevenworthington/3178163
# 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)
Run Code Online (Sandbox Code Playgroud)
另一种选择来自包装easypackages.安装后,您可以以最直观的方式加载包:
libraries("plyr", "psych", "tm")
Run Code Online (Sandbox Code Playgroud)
该软件包还包括一个安装多个软件包的功能:
packages("plyr", "psych", "tm")
Run Code Online (Sandbox Code Playgroud)
参考这里.
我认为 @daroczig 提供的代码可以通过替换requirewithlibrary并将lapply调用包装在invisible()函数中来改进。因此,改进后的代码如下所示:
invisible(lapply(x, library, character.only = TRUE))
Run Code Online (Sandbox Code Playgroud)
此代码已改进,因为:
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’
Run Code Online (Sandbox Code Playgroud)lapply()在这种情况下,调用返回和打印的列表对象没有意义,因此使输出不可见是有意义的。假设您使用 R Notebook 进行分析工作,使用该invisible()函数将抑制列表对象的内容并防止渲染的笔记本文件中出现混乱。
您可以简单地使用 lubripack 包,它会整齐地安装新包,然后在一行中加载所有包。
lubripack("plyr", "psych", "tm")
Run Code Online (Sandbox Code Playgroud)
这是在 RStudio 中运行以上代码后的输出。
运行以下代码以下载软件包并从 GitHub 安装它。无需拥有 GitHub 帐户。
library(devtools)
install_github("espanta/lubripack")
Run Code Online (Sandbox Code Playgroud)