2016-09-15 1 views
0

Прямо сейчас, я разрешаю зависимости со следующим методом:Как автоматически установить все необходимые пакеты?

  1. Источник файл.
  2. Если он жалуется о необходимости пакет X, пакет установки X.
  3. Перейти к 1.

Если есть большое количество необходимых пакетов, это может стать утомительным. Есть ли одна команда, которая может определять каждый необходимый пакет, а затем автоматически устанавливать их все?

У меня есть RStudio 0.98.1056 и R 3.3.1.

+7

Построить пакет. Затем, когда вы устанавливаете, все зависимости могут быть установлены. – Roland

+0

https://github.com/brianhigh/imp – hrbrmstr

ответ

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 

Затем вы можете посмотреть выходные данные и установить те, которые у вас еще нет. Не автоматический, но он доставит вам большую часть пути!

(примечание - я изначально не писать этот код ... нашел его где-то)

Edit: @Rich Скривен - вы правильно! Я целенаправленно поместил новую функцию в скрипт и был указан в 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) 
    } 
+2

Как это работает, если пакеты не установлены? 'find' возвращает символ' (0) ', если он необоснован, правильно? Некоторое объяснение было бы неплохо. –