Elegancki sposób na sprawdzenie brakujących pakietów i zainstalowanie ich?

Wydaję się, że ostatnio dzielę się dużo kodem ze współautorami. Wielu z nich jest początkującymi / średnio zaawansowanymi użytkownikami R i nie zdaje sobie sprawy, że muszą instalować pakiety, których jeszcze nie mają.

Czy istnieje elegancki sposób na wywołanie installed.packages(), porównanie tego do tych, które Ładuję i instaluję, jeśli brakuje?

Author: Jaap, 2010-11-03

26 answers

Tak. Jeśli masz listę pakietów, porównaj ją z wyjściem z installed.packages()[,"Package"] i zainstaluj brakujące pakiety. Coś takiego:

list.of.packages <- c("ggplot2", "Rcpp")
new.packages <- list.of.packages[!(list.of.packages %in% installed.packages()[,"Package"])]
if(length(new.packages)) install.packages(new.packages)

Inaczej:

Jeśli umieścisz swój kod w pakiecie i sprawisz, że będą one zależne, to zostaną one automatycznie zainstalowane podczas instalacji pakietu.

 215
Author: Shane,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-03 18:13:09

Dason K. i mam pacman pakiet, który może to zrobić ładnie. Funkcja p_load w pakiecie robi to. Pierwsza linia jest tylko po to, aby upewnić się, że pacman jest zainstalowany.

if (!require("pacman")) install.packages("pacman")
pacman::p_load(package1, package2, package_n)
 162
Author: Tyler Rinker,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-22 01:10:28

Możesz po prostu użyć zwracanej wartości require:

if(!require(somepackage)){
    install.packages("somepackage")
    library(somepackage)
}

Używam library Po instalacji, ponieważ spowoduje to wyrzucenie wyjątku, jeśli instalacja nie powiodła się lub pakiet nie może zostać załadowany z jakiegoś innego powodu. Możesz to zrobić bardziej wytrzymałe i wielokrotnego użytku:

dynamic_require <- function(package){
  if(eval(parse(text=paste("require(",package,")")))) return True

  install.packages(package)
  return eval(parse(text=paste("require(",package,")")))
}

Minusem tej metody jest to, że musisz podać nazwę pakietu w cudzysłowie, czego nie robisz dla prawdziwego require.

 47
Author: Livius,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-15 09:34:09

Chociaż odpowiedź Shane ' a jest naprawdę dobra, w jednym z moich projektów musiałem usunąć komunikaty ouput, ostrzeżenia i zainstalować pakiety automagicznie. W końcu udało mi się zdobyć ten skrypt:

InstalledPackage <- function(package) 
{
    available <- suppressMessages(suppressWarnings(sapply(package, require, quietly = TRUE, character.only = TRUE, warn.conflicts = FALSE)))
    missing <- package[!available]
    if (length(missing) > 0) return(FALSE)
    return(TRUE)
}

CRANChoosen <- function()
{
    return(getOption("repos")["CRAN"] != "@CRAN@")
}

UsePackage <- function(package, defaultCRANmirror = "http://cran.at.r-project.org") 
{
    if(!InstalledPackage(package))
    {
        if(!CRANChoosen())
        {       
            chooseCRANmirror()
            if(!CRANChoosen())
            {
                options(repos = c(CRAN = defaultCRANmirror))
            }
        }

        suppressMessages(suppressWarnings(install.packages(package)))
        if(!InstalledPackage(package)) return(FALSE)
    }
    return(TRUE)
}

Użycie:

libraries <- c("ReadImages", "ggplot2")
for(library in libraries) 
{ 
    if(!UsePackage(library))
    {
        stop("Error!", library)
    }
}
 15
Author: Juan Antonio Cano,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-14 16:14:01

To rozwiązanie pobierze wektor znaków z nazwami pakietów i spróbuje je załadować lub zainstalować, jeśli Ładowanie się nie powiedzie. Opiera się na Return behavior of require, aby to zrobić, ponieważ...

require zwraca (niewidocznie) logiczne wskazanie, czy wymagany pakiet jest dostępny

Dlatego możemy po prostu sprawdzić, czy udało nam się załadować wymagany pakiet, a jeśli nie, zainstalować go z zależnościami. Więc biorąc pod uwagę wektor znaków pakietów, które chcesz ładuj...

foo <- function(x){
  for( i in x ){
    #  require returns TRUE invisibly if it was able to load package
    if( ! require( i , character.only = TRUE ) ){
      #  If package was not able to be loaded then re-install
      install.packages( i , dependencies = TRUE )
      #  Load package after installing
      require( i , character.only = TRUE )
    }
  }
}

#  Then try/install packages...
foo( c("ggplot2" , "reshape2" , "data.table" ) )
 15
Author: Simon O'Hanlon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-09 14:09:21
if (!require('ggplot2')) install.packages('ggplot2'); library('ggplot2')

"ggplot2" jest pakietem. Sprawdza, czy pakiet jest zainstalowany, a jeśli nie, instaluje go. Następnie ładuje pakiet niezależnie od tego, która gałąź zajęła.

 11
Author: user6784955,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-01 21:04:34
# List of packages for session
.packages = c("ggplot2", "plyr", "rms")

# Install CRAN packages (if not already installed)
.inst <- .packages %in% installed.packages()
if(length(.packages[!.inst]) > 0) install.packages(.packages[!.inst])

# Load packages into session 
lapply(.packages, require, character.only=TRUE)
 7
Author: Brian Spiering,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-25 21:44:25

Wiele powyższych odpowiedzi (i na duplikaty tego pytania) opiera się na installed.packages, która jest złą formą. Z dokumentacji:

Może to być powolne, gdy zainstalowane są tysiące pakietów, więc nie używaj tego, aby dowiedzieć się, czy dany pakiet jest zainstalowany (użyj system./ align = "left" / package), ani aby dowiedzieć się, czy pakiet jest użyteczny (call require i sprawdź wartość zwracaną), ani aby znaleźć szczegóły niewielkiej liczby pakietów (użyj packageDescription). Musi odczytać kilka plików na zainstalowany pakiet, który będzie wolny w systemie Windows i niektórych systemach plików montowanych w sieci.

Więc lepszym podejściem jest próba załadowania pakietu za pomocą require i zainstalowania, jeśli Ładowanie się nie powiedzie (require zwróci FALSE Jeśli nie zostanie znaleziony). Wolę tę implementację:

using<-function(...) {
    libs<-unlist(list(...))
    req<-unlist(lapply(libs,require,character.only=TRUE))
    need<-libs[req==FALSE]
    if(length(need)>0){ 
        install.packages(need)
        lapply(need,require,character.only=TRUE)
    }
}

Które mogą być użyte w ten sposób:

using("RCurl","ggplot2","jsonlite","magrittr")

W ten sposób ładuje wszystkie pakiety, a następnie wraca i instaluje wszystkie brakujące pakiety (co, jeśli chcesz, jest przydatnym miejscem do wstawienia zachęty aby zapytać, czy użytkownik chce zainstalować pakiety). Zamiast wywoĹ 'ywaÄ ‡ install.packages oddzielnie dla kaĹźdego pakietu, mija on caĹ' y wektor odinstalowanych pakietăłw tylko raz.

Tutaj jest ta sama funkcja, ale z oknem dialogowym windows, które pyta, czy użytkownik chce zainstalować brakujące pakiety

using<-function(...) {
    libs<-unlist(list(...))
    req<-unlist(lapply(libs,require,character.only=TRUE))
    need<-libs[req==FALSE]
    n<-length(need)
    if(n>0){
        libsmsg<-if(n>2) paste(paste(need[1:(n-1)],collapse=", "),",",sep="") else need[1]
        print(libsmsg)
        if(n>1){
            libsmsg<-paste(libsmsg," and ", need[n],sep="")
        }
        libsmsg<-paste("The following packages could not be found: ",libsmsg,"\n\r\n\rInstall missing packages?",collapse="")
        if(winDialog(type = c("yesno"), libsmsg)=="YES"){       
            install.packages(need)
            lapply(need,require,character.only=TRUE)
        }
    }
}
 7
Author: Matthew,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-20 18:37:08

To jest cel pakietu rbundler: aby zapewnić sposób kontrolowania pakietów, które są zainstalowane dla określonego projektu. Obecnie pakiet współpracuje z funkcjami devtools, aby zainstalować pakiety w katalogu twojego projektu. Funkcjonalność jest podobna do bundler.

Jeśli twój projekt jest pakietem (zalecanym), to wystarczy załadować rbundlera i spakować Pakiety. Funkcja bundle spojrzy na plik DESCRIPTION twojego pakietu do określ, które pakiety należy połączyć.

library(rbundler)
bundle('.', repos="http://cran.us.r-project.org")

Teraz pakiety zostaną zainstalowane wKatalog Rbundle.

Jeśli twój projekt nie jest pakietem, możesz go sfałszować, tworząc plik DESCRIPTION w katalogu głównym projektu z polem Depends, który zawiera listę pakietów, które chcesz zainstalować (z opcjonalnymi informacjami o wersji):

Depends: ggplot2 (>= 0.9.2), arm, glmnet

Oto repo github dla projektu, jeśli jesteś zainteresowany udziałem: rbundler .

 6
Author: Erik Shilts,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-03 13:10:42

Jasne.

Musisz porównać 'zainstalowane pakiety' z 'żądanymi pakietami'. Jest to bardzo zbliżone do tego, co robię z CRANberries, ponieważ muszę porównać "przechowywane Znane pakiety" z "obecnie znane pakiety", aby określić nowe i/lub zaktualizowane pakiety.

Więc zrób coś takiego

AP <- available.packages(contrib.url(repos[i,"url"]))   # available t repos[i]

Aby uzyskać wszystkie znane Pakiety, należy wywołać symulację aktualnie zainstalowanych pakietów i porównać je z danym zestawem pakietów docelowych.

 5
Author: Dirk Eddelbuettel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-03 18:14:59

Następująca prosta funkcja działa jak urok:

  usePackage<-function(p){
      # load a package if installed, else load after installation.
      # Args:
      #   p: package name in quotes

      if (!is.element(p, installed.packages()[,1])){
        print(paste('Package:',p,'Not found, Installing Now...'))
        install.packages(p, dep = TRUE)}
      print(paste('Loading Package :',p))
      require(p, character.only = TRUE)  
    }

(nie mój, znalazłem to w sieci jakiś czas temu i używałem go od tego czasu. nie jestem pewien oryginalnego źródła)

 4
Author: Anish Sugathan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-17 15:34:51

Używam poniższej funkcji, aby zainstalować pakiet, jeśli require("<package>") zakończy się z błędem package not found. Odpytuje zarówno repozytoria-CRAN, jak i Bioconductor o brakujący pakiet.

Adaptacja oryginalnego dzieła Joshuy Wiley, http://r.789695.n4.nabble.com/Install-package-automatically-if-not-there-td2267532.html

install.packages.auto <- function(x) { 
  x <- as.character(substitute(x)) 
  if(isTRUE(x %in% .packages(all.available=TRUE))) { 
    eval(parse(text = sprintf("require(\"%s\")", x)))
  } else { 
    #update.packages(ask= FALSE) #update installed packages.
    eval(parse(text = sprintf("install.packages(\"%s\", dependencies = TRUE)", x)))
  }
  if(isTRUE(x %in% .packages(all.available=TRUE))) { 
    eval(parse(text = sprintf("require(\"%s\")", x)))
  } else {
    source("http://bioconductor.org/biocLite.R")
    #biocLite(character(), ask=FALSE) #update installed packages.
    eval(parse(text = sprintf("biocLite(\"%s\")", x)))
    eval(parse(text = sprintf("require(\"%s\")", x)))
  }
}

Przykład:

install.packages.auto(qvalue) # from bioconductor
install.packages.auto(rNMF) # from CRAN

PS: update.packages(ask = FALSE) & biocLite(character(), ask=FALSE) zaktualizuje wszystkie zainstalowane pakiety w systemie. Może to zająć dużo czasu i uznać to za pełny R uaktualnienie, które może nie być gwarantowane przez cały czas!

 4
Author: Samir,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-24 22:05:20

Możesz po prostu użyć funkcji setdiff, Aby pobrać pakiety, które nie są zainstalowane, a następnie je zainstalować. W poniższej próbce sprawdzamy, czy ggplot2 oraz Rcpp pakiety są instalowane przed ich zainstalowaniem.

unavailable <- setdiff(c("ggplot2", "Rcpp"), rownames(installed.packages()))
install.packages(unavailable)

W jednej linijce powyższe można zapisać jako:

install.packages(setdiff(c("ggplot2", "Rcpp"), rownames(installed.packages())))
 4
Author: Alex Essilfie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-08 08:05:58

Zaimplementowałem funkcję do cichego instalowania i ładowania wymaganych pakietów R. Nadzieja może pomóc. Oto kod:

# Function to Install and Load R Packages
Install_And_Load <- function(Required_Packages)
{
    Remaining_Packages <- Required_Packages[!(Required_Packages %in% installed.packages()[,"Package"])];

    if(length(Remaining_Packages)) 
    {
        install.packages(Remaining_Packages);
    }
    for(package_name in Required_Packages)
    {
        library(package_name,character.only=TRUE,quietly=TRUE);
    }
}

# Specify the list of required packages to be installed and load    
Required_Packages=c("ggplot2", "Rcpp");

# Call the Function
Install_And_Load(Required_Packages);
 3
Author: Pratik Patil,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-18 12:55:12

Użyj packrat, aby biblioteki współdzielone były dokładnie takie same i nie zmieniały środowiska innych.

Jeśli chodzi o elegancję i najlepsze praktyki, myślę, że zasadniczo robisz to w niewłaściwy sposób. pakiet packrat został zaprojektowany z myślą o tych problemach. Został opracowany przez RStudio przez Hadley Wickham. Zamiast instalować zależności i ewentualnie psować komuś środowisko system packrat używa własnego katalogu i instaluje wszystkie zależności dla swoich programów w ich i nie dotyka czyjegoś środowiska.
Packrat jest systemem zarządzania zależnościami dla R.

R zależności pakietów mogą być frustrujące. Czy kiedykolwiek musiałeś użyć metody prób i błędów, aby dowiedzieć się, jakie pakiety R musisz zainstalować, aby Kod kogoś innego działał–a potem zostałeś z tymi pakietami zainstalowanymi globalnie na zawsze, ponieważ teraz nie jesteś pewien, czy ich potrzebujesz? Czy kiedykolwiek zaktualizowałeś pakiet, aby kod w jednym z projektów działał, tylko po to, aby znaleźć że zaktualizowany pakiet sprawia, że kod w innym projekcie przestaje działać?

Zbudowaliśmy packrata, by rozwiązać te problemy. Użyj packrat, aby twoje projekty R były więcej:
  • izolowane: Instalacja nowego lub zaktualizowanego pakietu dla jednego projektu nie zepsuje innych projektów i vice versa. To dlatego, że packrat daje każdemu projektowi własną prywatną bibliotekę pakietów.
  • przenośny: łatwo przenoś swoje projekty z jednego komputera na drugi, nawet na różnych platformach. Packrat ułatwia instalację pakietów, od których zależy twój projekt.
  • Reproducible: Packrat rejestruje dokładne wersje pakietów, od których zależy, i zapewnia, że te dokładne wersje są instalowane gdziekolwiek jesteś.

Https://rstudio.github.io/packrat/

 3
Author: mtelesha,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-20 15:50:37

Odnośnie Twojego głównego celu " instalowania bibliotek, których jeszcze nie mają. "i niezależnie od użycia" instllaed.packages() ". Następująca funkcja maskuje oryginalną funkcję require. Próbuje załadować i sprawdzić nazwany pakiet "x" , Jeśli nie jest zainstalowany, zainstaluj go bezpośrednio wraz z zależnościami; i na koniec załaduj go normalnie. zmieniasz nazwę funkcji z "require" na "library", aby zachować integralność . Jedynym ograniczeniem jest to, że nazwy pakietów powinny być cytowany.

require <- function(x) { 
  if (!base::require(x, character.only = TRUE)) {
  install.packages(x, dep = TRUE) ; 
  base::require(x, character.only = TRUE)
  } 
}

Więc możesz załadować i zainstalować pakiet w starym stylu R. require ("ggplot2") require ("Rcpp")

 2
Author: GeoObserver,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-17 02:42:18

Dość podstawowy.

pkgs = c("pacman","data.table")
if(length(new.pkgs <- setdiff(pkgs, rownames(installed.packages())))) install.packages(new.pkgs)
 2
Author: jangorecki,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-26 01:47:54

Pomyślałem, że dodam ten, którego używam:

testin <- function(package){if (!package %in% installed.packages())    
install.packages(package)}
testin("packagename")
 2
Author: Ben,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-04 18:46:10

Używam następującej opcji, która sprawdzi czy pakiet jest zainstalowany i czy zależności są zaktualizowane, a następnie załaduje pakiet.

p<-c('ggplot2','Rcpp')
install_package<-function(pack)
{if(!(pack %in% row.names(installed.packages())))
{
  update.packages(ask=F)
  install.packages(pack,dependencies=T)
}
 require(pack,character.only=TRUE)
}
for(pack in p) {install_package(pack)}

completeFun <- function(data, desiredCols) {
  completeVec <- complete.cases(data[, desiredCols])
  return(data[completeVec, ])
}
 1
Author: metasequoia,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-02 15:24:20

Oto Mój kod na to:

packages <- c("dplyr", "gridBase", "gridExtra")
package_loader <- function(x){
    for (i in 1:length(x)){
        if (!identical((x[i], installed.packages()[x[i],1])){
            install.packages(x[i], dep = TRUE)
        } else {
            require(x[i], character.only = TRUE)
        }
    }
}
package_loader(packages)
 1
Author: Edward Tyler,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-12 16:22:47
 48 lapply_install_and_load <- function (package1, ...)
 49 {
 50     #
 51     # convert arguments to vector
 52     #
 53     packages <- c(package1, ...)
 54     #
 55     # check if loaded and installed
 56     #
 57     loaded        <- packages %in% (.packages())
 58     names(loaded) <- packages
 59     #
 60     installed        <- packages %in% rownames(installed.packages())
 61     names(installed) <- packages
 62     #
 63     # start loop to determine if each package is installed
 64     #
 65     load_it <- function (p, loaded, installed)
 66     {
 67         if (loaded[p])
 68         {
 69             print(paste(p, "loaded"))
 70         }
 71         else
 72         {
 73             print(paste(p, "not loaded"))
 74             if (installed[p])
 75             {
 76                 print(paste(p, "installed"))
 77                 do.call("library", list(p))
 78             }
 79             else
 80             {
 81                 print(paste(p, "not installed"))
 82                 install.packages(p)
 83                 do.call("library", list(p))
 84             }
 85         }
 86     }
 87     #
 88     lapply(packages, load_it, loaded, installed)
 89 }
 1
Author: ruemorgue,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-07 13:36:29
library <- function(x){
  x = toString(substitute(x))
if(!require(x,character.only=TRUE)){
  install.packages(x)
  base::library(x,character.only=TRUE)
}}

Działa to z nienotowanymi nazwami pakietów i jest dość eleganckie (por. Odpowiedź GeoObserver)

 1
Author: s n,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-20 08:33:52
source("https://bioconductor.org/biocLite.R")
if (!require("ggsci")) biocLite("ggsci")
 1
Author: Shicheng Guo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-22 02:27:46

Używając metody lapply family I anonymous function Można:

lib <- c("plyr", "psych", "tm")
req <- expression(require(x, character.only = TRUE))
sapply(lib, function(x) eval(req) || {install.packages(x); eval(req)})

plyr psych    tm 
TRUE  TRUE  TRUE 
  1. spróbuj załączyć wszystkie wymienione Pakiety.
  2. Install missing only (using || lazy evaluation).
  3. spróbuj ponownie załadować te, których brakowało w kroku 1 i zainstalowano w Kroku 2.
  4. wypisuje sumaryczny status załadowania dla każdego pakietu (TRUE / FALSE).
 1
Author: Georgie Shimanovsky,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-10-11 20:29:45

W moim przypadku chciałem jednego linera, który mógłbym uruchomić z linii poleceń (właściwie przez plik Makefile). Oto przykład instalacji "VGAM " i" feather", jeśli nie są już zainstalowane:

R -e 'for (p in c("VGAM", "feather")) if (!require(p, character.only=TRUE)) install.packages(p, repos="http://cran.us.r-project.org")'

From within R it would just be:

for (p in c("VGAM", "feather")) if (!require(p, character.only=TRUE)) install.packages(p, repos="http://cran.us.r-project.org")

Nie ma tu nic poza wcześniejszymi rozwiązaniami poza tym, że:

  • trzymam go do jednej linii
  • i hard code the repos parametr (aby uniknąć wyskakujących okienek pytających o użycie lustra)
  • I don ' t problem z zdefiniowaniem funkcji, która ma być używana gdzie indziej

Zwróć również uwagę na Ważne character.only=TRUE (bez niego,require próbuje załadować pakiet p).

 0
Author: user3780389,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-20 19:54:21

Spróbuj tego:

if (!require(MyDesiredLibrary)) {
   install.packages("MyDesiredLibrary")
}
 -2
Author: DiegoTorres,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-29 09:30:00