现在,我使用以下方法解决依赖关系:
如果有大量必需的包,这可能会变得乏味。是否有一个命令可以确定每个必需的包,然后自动安装它们?
我有RStudio 0.98.1056和R 3.3.1。
答案 0 :(得分:1)
您可以使用包pacman。p_load
函数查看是否已安装列出的软件包,如果缺少它们则安装它们并加载它们。这是我为r-shiny应用程序实现的示例
if(!require('pacman'))install.packages('pacman')
pacman::p_load(shiny,shinyjs,httr,jsonlite,tidyverse)
答案 1 :(得分:0)
我使用此代码在R脚本中查找所有必需的包。
# list packages in an R file
filename <- "C:/Data/Documents/R/myFile.R"
tmp <- getParseData(parse(filename, keep.source=TRUE))
crit <- quote(token == "SYMBOL_FUNCTION_CALL")
tmp <- dplyr::filter(tmp, .dots = crit)
tmp <- unique(sort(tmp$text))
src <- paste(as.vector(sapply(tmp, find)))
outlist <- tapply(tmp,factor(src),c)
outlist
然后,您可以查看输出并安装您尚未拥有的输出。不是自动的,但它会让你大部分时间都在那里!
(注意 - 我最初并没有写这个代码......在某个地方找到了它)
编辑:@Rich Scriven - 你是对的!我故意在脚本中添加一个新函数,它列在Character(0)下。你必须使用??找到包裹?也许然后安装它。
编辑2:我解决了这个问题并想出了这个来添加上面的代码。它将找到未附加的包,如果它们在库中,则附加它们。如果没有,请安装它们。
library(sos)
toInstall <- outlist$`character(0)`
for(i in 1:length(toInstall)){
newPackage<-findFn(toInstall[i])[1,4]
if (!require(newPackage,character.only = TRUE)) {
install.packages(newPackage)
library(newPackage,character.only = TRUE)
}
print(newPackage)
}