R: Избегать установки загруженных пакетов и избегать установки вложенных пакетов - PullRequest
0 голосов
/ 03 ноября 2018

Когда я выполняю отладку сложного сценария, мне часто приходится многократно исходить из сценария, чтобы точки останова RStudio были активными. В этом параметре я не хочу устанавливать пакеты, которые уже загружены (присоединены?), Потому что RStudio настоятельно рекомендует перезапускать R всякий раз, когда вы пытаетесь установить пакет, который уже загружен (присоединен?), И часть моего кода тестируется на больших (около 10-30 ГБ) файлах данных, для которых загрузка файла в 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 голосов
/ 03 ноября 2018

Хотя это не полностью отвечает на ваш вопрос - вы можете запустить сценарий перед началом отладки, для которого в сценарии используются пакеты. Кроме того, чтобы избежать конфликта версий в пакетах (например, если скрипт использует 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)

}
...