R:避免安装加载的软件包与避免安装附加的软件包

时间:2018-11-03 03:04:25

标签: r installation package updating loaded

在调试复杂脚本时,经常需要重复获取脚本源,以便激活RStudio断点。在此设置下,我不想安装已经加载(附加?)的软件包,因为RStudio强烈建议您在尝试安装已经加载(附加?)的软件包时重新启动R,并且我的一些代码正在测试中在大型(大约10-30 GB)数据文件上,将这些文件上传到R中非常耗时。

到目前为止,我从来不需要区分加载的程序和附加的程序,因为我一直都没有做过。但是我现在正在尝试编写一个函数来避免安装已加载(附加?)的程序,并且我试图理解避免重新安装仅加载的软件包,仅附加的软件包,仅重新加载和附加的软件包的相对含义,或仅加载或附加的软件包。

下面的代码应该更新所有软件包,然后安装从(可能是)新软件包中获取的所有软件包,这些新软件包要么已卸载,要么未附加,或者两者都被安装。但是,如果加载了软件包但未附加也未安装(如果可能),则将不会安装该软件包。这种限制在任何可能的情况下都会引起问题吗?

install.packs <- function(pks, ...){
  update.packages(ask=FALSE)
  uninstalled <- pks[!(pks %in% installed.packages(...)[ , 1])] 
  unattached  <- pks[!(pks %in% (.packages(...)))]
  new_pks     <- unique(c(uninstalled, unattached))
  install.packages(unattached, repos = "https://cloud.r-project.org/", ...)
}

1 个答案:

答案 0 :(得分:1)

虽然它不能完全回答您的问题-您可以在开始调试之前运行脚本,该脚本中使用了哪些软件包。另外,为避免软件包中的版本冲突(例如,如果脚本使用ggplot2_2.0.0但您已安装ggplot2_3.0.0),则可以使用checkpoint软件包。

例如:

InstallNeededPackges <- function(path) {

  #Load/Install checkpoint pkg
  if (!require("checkpoint")) install.packages("checkpoint")

  #Getting the list of all pkgs in the script
  PkgsInScript <- checkpoint::scanForPackages(Path,
                                              use.knitr = TRUE)

  #Finding missing pkgs
  list.of.packages <- PkgsInScript$pkgs
  new.packages <- list.of.packages[!(list.of.packages %in% installed.packages()
                                     [,"Package"])]

  #Installing
  install.packages(new.packages)

}