2016-08-13 28 views
9

Czy w Pythonie istnieje funkcjonalność, taka jak requirements.txt, w której można zapisać listę pakietów używanych w pliku, a gdy inne osoby chcą uruchamiać programy i muszą zainstalować zależności, mogą po prostu wykonać pip install -r requirements.txt.Czy jest coś takiego jak require.txt dla R?

Myślę, że to bardzo pomaga podczas wdrażania skryptu R do produkcji. Jeśli nie ma takiej funkcji, jak ją zreplikować?

+1

Do jakiej "funkcji" się odwołujesz? Co powinien zrobić plik requirements.txt? – MrFlick

+1

Nie mogę powiedzieć, o co pytasz (i nie jestem jeszcze jednym z graczy w dół). Wdrażanie odbywa się zwykle za pomocą pakietu. Może być to, co znajduje się w pliku DESCRIPTION lub co znajduje się w pliku '.Rprofile'. –

+2

Spróbuj użyć 'packrat' – hrbrmstr

Odpowiedz

3

Zgodnie z komentarzami, warto przyjrzeć się budowaniu pakietu i uwzględnieniu wymagań w pliku DESCRIPTION. Jeśli mówisz o "wprowadzeniu" skryptu .R do produkcji, możesz ustawić funkcję na początku, aby upewnić się, że wymagane pakiety są zainstalowane. Oto coś, co mam w swoim pakiecie i mogę zadzwonić pod numer pkgLoad(<list of packages>) na początku każdego skryptu, aby upewnić się, że pakiety są zainstalowane i załadowane. I zawiera listę moich ulubionych pakietów, tak że wezwanie pkgLoad() instaluje i ładuje wszystkie moje Podejrzani:

pkgLoad <- function(packages = "favourites") { 

    if(length(packages) == 1L && packages == "favourites") { 
     packages <- c("data.table", "chron", "plyr", "dplyr", "shiny", 
         "shinyjs", "parallel", "devtools", "doMC", "utils", 
         "stats", "microbenchmark", "ggplot2", "readxl", 
         "feather", "googlesheets", "readr", "DT", "knitr", 
         "rmarkdown", "Rcpp" 
     ) 
    } 

    packagecheck <- match(packages, utils::installed.packages()[,1]) 

    packagestoinstall <- packages[ is.na(packagecheck) ] 

    if(length(packagestoinstall) > 0L) { 
     utils::install.packages(packagestoinstall, 
          repos = "http://cran.csiro.au" 
     ) 
    } else { 
     print("All requested packages already installed") 
    } 

    for(package in packages) { 
     suppressPackageStartupMessages(
      library(package, character.only = TRUE, quietly = TRUE) 
     ) 
    } 

} 

Note I został zbudowany mój ulubiony lustro CRAN do funkcji, więc upewnij się, że do edycji własne potrzeby.

+1

W typowy amerykański sposób myliłem rozszerzenie domeny Australii dla Austrii i zastanawiałem się, dlaczego nie pobierasz z najbliższego lustra, szczególnie, że jest to centralne lustro CRAN. – shayaa