Domanda

Andrew Gelman ha recentemente lamentato la mancanza di un facile processo di aggiornamento per R (probabilmente più rilevante su Windows rispetto a Linux). Qualcuno ha un buon trucco per eseguire l'aggiornamento, dall'installazione del software alla copia di tutte le impostazioni / pacchetti?

Questo suggerimento era contenuto nei commenti ed è quello che ho usato di recente. Prima installa la nuova versione, quindi esegui questa versione nella vecchia versione:

#--run in the old version of R
setwd("C:/Temp/")
packages <- installed.packages()[,"Package"]
save(packages, file="Rpackages")

Seguito da questo nella nuova versione:

#--run in the new version
setwd("C:/Temp/")
load("Rpackages")
for (p in setdiff(packages, installed.packages()[,"Package"]))
install.packages(p)
È stato utile?

Soluzione

Solo per completezza, ci sono alcuni modi per impedirti di avere questo problema. Come ha detto Dirk, salva i tuoi pacchetti in un'altra directory sul tuo computer.

install.packages("thepackage",lib="/path/to/directory/with/libraries")

Puoi modificare anche il valore .Library predefinito usando anche la funzione .libPaths

.libPaths("/path/to/directory/with/libraries")

Questo inserirà questo percorso come primo valore nella variabile .Library e lo renderà predefinito.

Se vuoi automatizzarlo ulteriormente, puoi specificarlo nel file Rprofile.site, che trovi nella directory / etc / della tua build R. Quindi si caricherà automaticamente ogni volta che si carica R, e non dovrai più preoccupartene. Puoi semplicemente installare e caricare i pacchetti dalla directory specificata.

Infine, ho incluso un piccolo codice nel mio Rprofile.site che mi consente di reinstallare tutti i pacchetti quando installo una nuova versione R. Devi solo elencarli prima di aggiornare alla nuova versione R. Lo faccio usando un file .RData contenente un elenco aggiornato con tutti i pacchetti.

library(utils)

## Check necessary packages
load("G:\Setinfo\R\packagelist.RData") # includes a vector "pkgs"
installed <- pkgs %in% installed.packages()[, 'Package']
if (length(pkgs[!installed]) >=1){
  install.packages(pkgs[!installed])
}

Faccio il packagelist.RData specificando .Last () nel mio Rprofile.site. Questo aggiorna l'elenco dei pacchetti se ne ho installato alcuni:

.Last <- function(){
  pkgs <- installed.packages()[,1]
  if (length(pkgs) > length(installed)){
    save(pkgs,file="G:\Setinfo\R\packagelist.RData")
  }
}

Quando installo una nuova versione R, aggiungo semplicemente gli elementi necessari al file Rprofile.site e tutti i pacchetti vengono reinstallati. Devo comunque regolare Rprofile.site (usando i contrasti di somma, aggiungendo il codice extra per Tinn-R, queste cose), quindi non è davvero un lavoro extra. Ci vuole solo tempo extra per installare tutti i pacchetti di nuovo.

Quest'ultimo bit equivale a ciò che viene fornito nella domanda originale come soluzione. Non mi devo preoccupare di ottenere " installato " prima l'elenco.

Ancora una volta, questo non funziona perfettamente se si hanno pacchetti che non sono installati da CRAN. Ma questo codice è facilmente estendibile per includere anche quelli.

Altri suggerimenti

Questa è ovviamente una vecchia domanda, ma potrebbe esserci una nuova risposta semplice (funzionante solo per Windows), che ho appena trovato.

install.packages("installr")
require(installr)
updateR()

Il modo migliore per farlo è dal sistema RGui. Tutti i tuoi pacchetti verranno trasferiti nella nuova cartella e quelli vecchi verranno eliminati o salvati (puoi sceglierne uno). Quindi, una volta aperto nuovamente RStudio, riconosce immediatamente che si sta utilizzando una versione aggiornata. Per me questo ha funzionato come un fascino,

Ulteriori informazioni su {installr} qui .

Simon

Due suggerimenti rapidi:

  1. Usa i batchfile di Gabor, che si dice comprendano strumenti che aiutano ad es. questo rilocazioni di libreria di massa. Avvertenza: non li ho usati.

  2. Non installare librerie all'interno del 'filetree' della versione R installata. Su Windows, posso mettere R in C: / opt / R / R- $ versione ma posizionare tutte le librerie in C: / opt / R / library / usando il seguente frammento in quanto allevia il problema in primo luogo:

$ cat .Renviron         # this is using MSys/MinGW which looks like Cygwin  
## Example .Renviron on Windows    
R_LIBS="C:/opt/R/library"

Il metodo suggerito sopra non funzionerà completamente se si hanno pacchetti che non provengono da CRAN. Ad esempio, un pacchetto personale o un pacchetto scaricato da un sito non CRAN.

Il mio metodo preferito su Windows (aggiornamento da 2.10.1 a 2.11.0):

  1. Installa R-2.11.0
  2. Copia R-2.10.0 / library / * in R-2.11.0/library/
  3. Rispondi " no " alle istruzioni che ti chiedono se è possibile sovrascrivere.
  4. Avvia R 2.11.0
  5. Esegui il comando R update.packages()

Rispetto alla soluzione fornita nella domanda, potrebbe non essere facile eseguire la versione precedente di R se è già stata installata la nuova versione. In questo caso, è ancora possibile reinstallare tutti i pacchetti mancanti dalla versione R precedente come segue.

# Get names of packages in previous R version
old.packages <- list.files("/Library/Frameworks/R.framework/Versions/3.2/Resources/library")

# Install packages in the previous version. 

# For each package p in previous version...
    for (p in old.packages) {
      # ... Only if p is not already installed
      if (!(p %in% installed.packages()[,"Package"])) {
        # Install p 
        install.packages(p) 
      }
    }

(Nota che l'argomento di list.files () nella prima riga di codice dovrebbe essere il percorso della directory della libreria per la tua precedente versione R, dove tutte le cartelle dei pacchetti nella versione precedente Nel mio caso attuale, questo è " /Library/Frameworks/R.framework/Versions/3.2/Resources/library" . Questo sarà diverso se la tua precedente versione R non è 3.2, oppure se sei su Windows.)

L'istruzione if assicura che un pacchetto sia non installato se

  • È già installato nella nuova versione R, oppure
  • È stato installato come dipendenza da un pacchetto installato in una precedente iterazione del ciclo for .

Seguendo il suggerimento di Dirk, ecco un codice R per farlo su Windows: Come aggiornare facilmente R su Windows XP

Aggiornamento (15.04.11): ho scritto un altro post sull'argomento, spiegando come affrontare i problemi comuni di aggiornamento di R su Windows 7

Due opzioni:

  1. Implementa la mia risposta qui
  2. Se usi R in Eclipse con StatET, apri Esegui configurazioni , fai clic sulla scheda Console e nella casella denominata R snippet run after startup aggiungi questa riga con la tua scelta di directory: .libPaths("C:/R/library")

Sono su Windows 8 e per qualche strano motivo, non riesco mai a installare pacchetti usando le mie connessioni Internet.

In genere lo installo usando il file .zip di CRAN.

Dopo sono passato da R 3.2.5 a R 3.3.1.

Ho semplicemente copiato i pacchetti da

C: \ Path \ to \ packa \ R \ win-library \ 3.2 su C: \ Path \ to \ packa \ R \ win-library \ 3.3 .

E poi ho riavviato la sessione R. Ha funzionato perfettamente. Non ho verificato se TUTTI i pacchetti funzionano bene. Ma quelli che ho controllato funzionano perfettamente. Spero che questo hack funzioni per tutti.

Saluti.

La risposta accettata potrebbe funzionare se hai lungimiranza, ma mi ero già sbarazzato della vecchia versione, quindi non ero in grado di seguire queste indicazioni. I passaggi descritti di seguito hanno funzionato per l'aggiornamento di OSX da 2.1 e 3.1.

AGGIORNATO: per ottenere la directory per la versione più recente (invece di digitare 3.1 o 3.2) è possibile utilizzare i comandi seguenti. Il secondo converte direttamente nella variabile R, saltando . e .. e .DS_Store , usa:

OLD=$(ls -d /Library/Frameworks/R.framework/Versions/*.* |tail -n 2 | head -n 1)Resources/library/
echo "packages = c(\"`ls $OLD | tail +4| paste -s -d ',' - | sed -E 's|,|\",\"|'g`\")" | tr -d "/" 

(Aggiungi | pbcopy alla fine per copiarlo direttamente negli appunti del tuo Mac)

Quindi in R puoi incollare quella variabile che viene generata. Una volta definito nella nuova versione di R, è possibile scorrere i pacchetti installati dalle istruzioni sopra ...

for (p in setdiff(packages, installed.packages()[,"Package"]))
   install.packages(p, dependencies=TRUE, quiet=TRUE, ask=FALSE)

per me questa pagina è buona https : //www.r-statistics.com/2013/03/updating-r-from-r-on-windows-using-the-installr-package/ o un'altra opzione è semplicemente installare la nuova opzione e alla fine hai messo, ad esempio in Windows nel mio pc

.libPaths (c ( & Quot; D: /Documents/R/win-library/3.2" ;, " C: / Programmi / R / R-3.2.3 / libreria " ;, " C: / Programmi / R / R-3.2.0 / libreria " ;, & Quot; D: /Documents/R/win-library/2.15" )

ogni percorso dell'ultima versione nel mio caso ho sempre messo il primo percorso è " D: /Documents/R/win-library/3.2" quello è riparato e poi ho messo l'altro perché non hai bisogno di copiare o spostare alcun pacchetto, nel mio caso basta chiamarlo

linux + bash + debian + apt utenti:

  1. Se stai installando / aggiornando alla versione più recente di R , possiamo presumere che tu abbia le autorizzazioni root . (Non essenziale, rende il processo molto più semplice; per coerenza lo script seguente utilizza sudo per tutte installazioni.) Poiché i pacchetti R sono installati anche da root , è quindi possibile inserirli in / usr / local / .

  2. La chiamata a curl di seguito presuppone che tu sia già interessato alla versione sid di R , l'ultima versione instabile (come richiesto durante la creazione / verifica di un pacchetto R ) cioè

    cat /etc/apt/sources.list | grep 'sid' || uscita 1

    sebbene ciò possa essere facilmente sostituito con una versione stabile recente, ad es. Buster .

  3. Nota che non sto non usando una chiave come generalmente consigliato . Questo non è essenziale, in particolare se (come nello script che segue) installiamo i pacchetti all'interno di R stesso ( Rscript -e di seguito). Inoltre, tali chiavi hanno la tendenza a rompersi / cambiare ogni pochi anni. Pertanto, sei ovviamente il benvenuto ad aggiungere la seguente prefazione al file R.sh che segue:

    sudo apt-key adv --keyserver keyserver.ubuntu.com \       --recv-keys E298A3A825C0D65DFD57CBB651716619E084DAB9

  4. L'array dei pacchetti R non è chiaramente esaustivo ma fornisce alcuni esempi che personalmente trovo utili. Una nuova installazione / aggiornamento con il pacchetto debian r-consigliato , come di seguito, dovrebbe fornire l'ultima versione di tutti i pacchetti standard "raccomandati" (ad es. survival ). Credo che potrebbe esserci un leggero ritardo tra una versione CRAN e un aggiornamento del relativo pacchetto debian . Pertanto, potresti voler aggiungere alcuni di questi al array di seguito se è essenziale disporre dell'ultima versione di un pacchetto R "raccomandato".

  5. I pacchetti debian installati nel processo seguente non sono né indispensabili (per usare r-base ) né esaustivi ma forniscono un no. di "componenti aggiuntivi" che sono importanti per un ragionevole no. di pacchetti R .

Comunque ... inserisci quanto segue in R.sh :

sudo apt update && sudo apt --yes full-upgrade
sudo apt install --yes libappstream4 curl
### ov1 = online version; lv1 = local version (i.e. currently installed)
ov1=$(curl --silent --url https://packages.debian.org/sid/r-base |
    grep 'meta name=\"Keywords\"' |
    grep --only-matching '[0-9].*[0-9]') ; echo $ov1
## command -v = print a description of COMMAND similar to the `type' builtin
## && = if prior command succeeds, then do; || = if prior fails, then do
command -v 'R --version' &&
    lv1=$(R --version |
              grep --only-matching '[0-9\.]*[0-9]' |
              ## || = otherwise
              head -1) ||
        lv1=0
## 'lt' = less than
if dpkg --compare-versions "$lv1" 'lt' "$ov1" 
then ## declare -a = indexed array
     declare -a deb1=('r-base' 'r-base-dev' 'r-recommended')
     for i in "${deb1[@]}"
     do sudo apt install --yes "$i"
     done
fi
### certain Debian packages are required by 'R' so best have these first
sudo apt install --yes ccache libcairo2-dev libxml2-dev libcurl4-openssl-dev \
     libssl-dev liblapack-dev libssl-dev
declare -a pkg1=('data.table' 'ggplot2' 'knitr' 'devtools' 'roxygen2')
## installing as 'root' so these are installed in
Rscript -e ".libPaths()[1]"
for i in "${pkg1[@]}"
do sudo Rscript -e "install.packages('$i', dependencies=TRUE)"
done
### other useful additions
sudo apt install --yes libblas-dev libboost-dev libarmadillo-dev \
     jags pandoc pandoc-citeproc 
sudo apt update && sudo apt full-upgrade

Quindi eseguilo, ad es. assumendo già nella directory: source R.sh .

L'installazione di pacchetti ( debian o R ) uno alla volta in un ciclo dalla shell è in qualche modo inefficiente, ma consente di semplificare traccia degli errori, IMHO. Potrebbe richiedere del tempo a seconda del no. di pacchetti R , quindi forse il più semplice lasciar correre durante la notte ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top