Frage

Andrew Gelman klagte vor kurzem das Fehlen eines einfachen Upgrade-Prozess für R (wahrscheinlich mehr relevant unter Windows als Linux). Hat jemand einen guten Trick haben für das Upgrade zu tun, von der Installation der Software zu kopieren alle Einstellungen / Pakete über?

Dieser Vorschlag wurde in den Kommentaren enthalten und ist das, was ich habe vor kurzem im Einsatz. Zuerst Sie die neue Version installieren, dann führen Sie dies in der alten verion:

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

Gefolgt von diesem in der neuen Version:

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

Lösung

Nur der Vollständigkeit halber, gibt es einige Möglichkeiten, wie Sie zu verhindern, dass dieses Problem. Als Dirk sagte, die Pakete in einem anderen Verzeichnis auf Ihrem Computer speichern.

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

Sie können den Standard .Library Wert mit der Funktion .libPaths ändern

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

Dies wird gesetzt, diesen Weg als ein erster Wert in der .Library variabel, und es wird der Standard machen.

Wenn Sie dies weiter automatisieren möchten, können Sie dies in der Rprofile.site-Datei angeben, die Sie im Verzeichnis / etc / Ihrer R build finden. Dann lädt sie jedes Mal R Lasten automatisch, und Sie müssen das nicht mehr befürchten. Sie können einfach installieren und Last-Pakete aus dem angegebenen Verzeichnis.

Schließlich, ich habe einige kleine Code in meinem Rprofile.site enthalten Erlauben mir alle Pakete neu zu installieren, wenn ich eine neue R-Version installieren. Sie müssen nur sie auflisten vor Sie auf die neue R-Version aktualisieren. Ich mache das mit einer .rdata Datei mit allen Paketen eine aktualisierte Liste enthält.

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])
}

Ich mache den packagelist.RData von .Last() in meinem Rprofile.site angeben. Dies aktualisiert die Paketliste, wenn ich einige installiert:

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

Wenn ich eine neue R-Version zu installieren, ich fügen Sie einfach die notwendigen Elemente zur Rprofile.site Datei und alle Pakete neu installiert werden. Ich habe die Rprofile.site sowieso einstellen (Summe mit kontrastiert, das Hinzufügen des zusätzlichen Code für Tinn-R, diese Dinge), so ist es nicht wirklich zusätzliche Arbeit. Es dauert nur zusätzliche Zeit neu alle Pakete zu installieren.

Das letzte Bit entspricht dem, was in der ursprünglichen Frage als eine Lösung gegeben wird. Ich brauche nur nicht zuerst darum, die „installiert“ -Liste zu sorgen.

Auch dies funktioniert nicht einwandfrei, wenn Sie Pakete, die von CRAN nicht installiert sind. Aber dieser Code ist leicht ausziehbar zu, jene mit einzuschliessen.

Andere Tipps

Dies ist eine alte Frage natürlich, aber es könnte eine neue einfache Antwort (Arbeits nur für Windows) sein, die ich gerade gefunden.

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

Der beste Weg, dies zu tun, ist aus dem Rgui System. Alle Ihre Pakete werden in den neuen Ordner übertragen werden und die alten werden gelöscht oder gespeichert (Sie können entweder wählen). Dann, wenn Sie wieder öffnen RStudio, erkennt er sofort, dass Sie eine aktualisierte Version verwenden. Für mich ist dies wie ein Zauber,

Zwei schnelle Vorschläge:

  1. Mit Gabor Batch-Dateien welche Werkzeuge gesagt umfassen beispielsweise mit Hilfe diese Bulk-Bibliothek Verlagerungen. Caveat:. Ich habe sie nicht benutzt

  2. Installieren Sie keine Bibliotheken innerhalb des 'filetree' der installierten R-Version. Unter Windows kann ich R in C setzen: / opt / R / R $ Version, sondern legen Sie alle Bibliotheken in C: / opt / R / Bibliothek / mit dem folgenden Code-Schnipsel, wie sie das Problem in erster Linie mildern:

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

Das Verfahren vorgeschlagen oben nicht vollständig funktionieren, wenn Sie Pakete haben, die nicht von CRAN ist. Zum Beispiel kann ein persönliches Paket oder ein von einer Nicht-CRAN Website heruntergeladene Paket.

Meine bevorzugte Methode unter Windows (Upgrade 2.10.1 bis 2.11.0):

  1. Installieren R-2.11.0
  2. Kopieren R-2.10.0/library/* R-2.11.0/library/
  3. Antwort „Nein“ auf die Eingabeaufforderungen gefragt, ob es okay ist, zu überschreiben.
  4. Start R 2.11.0
  5. Führen Sie den Befehl R update.packages()

Im Hinblick auf die Lösung in der Frage gegeben, könnte es nicht einfach sein, Ihre ältere Version von R zu laufen, wenn Sie bereits die neue Version installiert haben. In diesem Fall können Sie immer noch alle fehlenden Pakete aus der vorherigen R-Version neu zu installieren wie folgt.

# 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) 
      }
    }

(Beachten Sie, dass das Argument in der ersten Zeile des Codes list.files() sollte den Pfad zu dem Bibliotheksverzeichnis für Ihre frühere R-Version sein, wo alle Ordner der Pakete in der vorherige Version sind. In meinem aktuellen Fall ist dies "/Library/Frameworks/R.framework/Versions/3.2/Resources/library". Dies wird anders sein, wenn Ihre vorherige R-Version nicht 3.2 ist, oder wenn Sie auf Windows sind).

Die if Anweisung stellt sicher, dass ein Paket nicht installiert, wenn

  • Es ist bereits in der neuen R-Version installiert ist, oder
  • Hat als eine Abhängigkeit von einem Paket in einer früheren Iteration der for Schleife installiert installiert.

Dirk Vorschlag folgend, hier einig R-Code auf Windows zu tun: Wie leicht aktualisieren R auf Windows XP

Update (15.04.11): Ich schrieb eine weiteren Beitrag zu diesem Thema, zu erklären, wie mit häufig gestellten Fragen von Erweitern R auf windows 7

Zwei Optionen:

  1. Implementieren Sie meine Antwort hier
  2. Wenn Sie R unter Eclipse StatET verwenden, öffnen Sie Run Configurations , klicken Sie auf Console Registerkarte und in der Box namens R Schnipsel nach dem Start ausgeführt diese Zeile mit Ihrer Wahl von Verzeichnis hinzuzufügen: .libPaths("C:/R/library")

Ich bin auf Windows 8 und aus irgendeinem seltsamen Grund, ich kann nie Pakete installieren meine Internet-Verbindungen.

ich es in der Regel installieren Sie die ZIP-Datei von CRAN verwendet wird.

Nachdem ich von R ging 3.2.5 R 3.3.1.

ich einfach die Pakete von

kopiert

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

Und dann neu gestartet ich die R-Sitzung. Funktionierte perfekt. Ich habe nicht geprüft, ob alle Pakete gut funktionieren. Aber die, die ich überprüft arbeiten sehr gut. Hoffe, dass dieser Hack funktioniert für alle.

Prost.

Die akzeptierte Antwort könnte funktionieren, wenn Sie Weitsicht haben, aber ich hatte schon von der alten Version, so war nicht in der Lage zu folgen, diese Richtungen losgeworden. Die Schritte für OSX Upgrade von 2.1 und 3.1 unten gearbeitet beschrieben.

AKTUALISIERT: Um das Verzeichnis für die neueste Version zu erhalten (statt in 3.1 oder 3.2 eingeben) können Sie die folgenden Befehle verwenden. Die zweite wandelt direkt an das R-Variable, Überspringen und . .. und .DS_Store, zu verwenden:

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 "/" 

(Add |pbcopy bis zum Ende es direkt auf Ihren Mac Zwischenablage zu kopieren)

Dann innerhalb von R können Sie die Variable einfügen, die erzeugt wird. Sobald das in der neuen Version von R definiert ist, können Sie eine Schleife durch die installierten Pakete von den Anweisungen oben ...

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

für mich diese Seite ist gut https : //www.r-statistics.com/2013/03/updating-r-from-r-on-windows-using-the-installr-package/ oder Eine weitere Option ist gerade die neue Option installieren und endgültig legen Sie zum Beispiel in Fenstern in meinem PC

.libPaths (c ( "D: /Documents/R/win-library/3.2", "C: / Programme / R / R-3.2.3 / library", "C: / Programme / R / R-3.2.0 / library", "D: /Documents/R/win-library/2.15" )

jeder Weg der letzten Version in meinem Fall habe ich immer den ersten Weg gestellt ist „D: /Documents/R/win-library/3.2“, die festgelegt ist und dann habe ich die anderen, weil Sie keine Kopie benötigen oder irgendwelche Pakete bewegen, in meinem Sugest nur nennen es

linux + bash + debian + apt Benutzer:

  1. Wenn Sie die Installation / Upgrade auf die neueste Version von R, dann können wir davon ausgehen, Sie haben root Berechtigungen. (Nicht wesentlich ist, macht nur den Prozess viel einfacher,. Für Konsistenz des Skript unten verwendet sudo für alle installiert) Da die R Pakete auch durch root installiert sind, ist es daher zulässig, diese in /usr/local/ zu stellen.

  2. Der Aufruf unten an curl vorausgesetzt, dass Sie bereits Interesse an der sid Freisetzung von R ist, die neueste Unstable Version (je nach Bedarf beim Bau / Überprüfung eines R Pakets), dh

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

    obwohl dies leicht mit einer aktuellen stabilen Version ersetzt werden könnte z.B. buster.

  3. Beachten Sie, dass ich bin nicht mit einer Taste wie der Regel empfohlen . Dies ist nicht wesentlich, insbesondere wenn (wie im Skript, das folgt) wir Installieren von Paketen in R selbst (Rscript -e unten). Auch solche Tasten haben eine Tendenz zu brechen / alle paar Jahre zu ändern. So sind Sie natürlich herzlich eingeladen, die folgende Vorwort zur Datei R.sh hinzuzufügen, die folgt:

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

  4. Die array von R Pakete ist eindeutig nicht erschöpfend, sondern gibt einige Beispiele, die ich persönlich nützlich finden. Eine Neuinstallation / Upgrade mit dem debian Paket r-recommended , wie weiter unten sollte, gibt die neueste Version aller von dem Standard ‚empfohlenen‘ Paketen (zB survival). Ich glaube, dass es eine leichte Verzögerung zwischen einem CRAN Release sein kann und eine Aktualisierung des relevanten debian Paket. So möchten Sie vielleicht einige von ihnen an die array unten hinzuzufügen, wenn die neueste Version eines R Paket ‚empfehlenswert‘ ist von wesentlicher Bedeutung.

  5. Die debian Pakete unten im Prozess installiert sind auch weder für wichtig (für die Verwendung von r-base) noch erschöpfend, sondern eine nicht bieten. von ‚Add-ons‘, die für eine angemessene nicht wichtig sind. von R Pakete.

Wie auch immer ... die folgend 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

Führen Sie dann es, z.B. unter der Annahme, im Verzeichnis bereits. source R.sh

Die Installation von Paketen (ob debian oder R) one-by-one in einer Schleife von Shell etwas ineffizient ist, sondern ermöglicht eine einfachere Verfolgung von Fehlern, IMHO. einige Zeit in Abhängigkeit von der nicht annehmen. von R Paketen, also vielleicht einfachsten über Nacht laufen zu lassen ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top