问题描述
例如,我有一个本地broom
软件包,其中包含几个必备软件库,例如backports
。
install.packages("broom",lib=file.path(Sys.getenv("userprofile"),"desktop","project"))
我发现以下library
不会一起加载必要的先决条件。
library(broom,lib.loc=file.path(Sys.getenv("userprofile"),"project"))
Error: package or namespace load Failed for ‘broom’:
.onLoad Failed in loadNamespace() for 'pillar',details:
call: loadNamespace(name)
error: there is no package called ‘Crayon’
我已经有了这些先决条件,因为install.packages
一起下载了它们。
backports
)之前,是否应该先加载所有必备库(例如broom
)?解决方法
我制作了此函数,该函数基本上加载了所传递软件包的依赖关系,现在您需要做的就是在加载broom
之前运行它,然后它将加载依赖关系。
# loads dependencies of passed packages
# can be used in two forms :
# load.dep(broom,tidyr)
#. load.dep("broom","tidyr")
load.dep <- function(...){
x <- as.list(substitute(...()))
stopifnot(length(x)>0)
x <- sapply(x,as.character)
avp <- available.packages()
pkgs <- unlist(strsplit(avp[x,c("Imports","Depends")],split=" ?(\\([^)]+?\\))?,?"),use.names=F)
invisible(lapply(pkgs[!grepl('^(\\n|R )',pkgs)],library,character.only=T))
}