一起将R中的本地库与先决条件一起加载

问题描述

例如,我有一个本地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))
}