Schmerzlose Möglichkeit, eine neue Version von R zu installieren?

158

Andrew Gelman beklagte kürzlich das Fehlen eines einfachen Upgrade-Prozesses für R (wahrscheinlich relevanter unter Windows als unter Linux). Hat jemand einen guten Trick für das Upgrade, von der Installation der Software bis zum Kopieren aller Einstellungen / Pakete?

Dieser Vorschlag war in den Kommentaren enthalten und wurde kürzlich verwendet. Zuerst installieren Sie die neue Version und führen diese dann in der alten Version aus:

#--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)
Shane
quelle
1
Wie aktuell ist die hier verwendete Lösung?
maj
Ich habe es kürzlich benutzt und funktioniert großartig.
Litwos

Antworten:

74

Der Vollständigkeit halber gibt es einige Möglichkeiten, um zu verhindern, dass Sie dieses Problem haben. Speichern Sie Ihre Pakete, wie Dirk sagte, in einem anderen Verzeichnis auf Ihrem Computer.

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

Sie können den Standard ändern .LibraryWert der Funktion .libPathszu

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

Dadurch wird dieser Pfad als erster Wert in die .LibraryVariable eingefügt und als Standardwert festgelegt.

Wenn Sie dies weiter automatisieren möchten, können Sie dies in der Datei Rprofile.site angeben, die Sie im Verzeichnis / etc / Ihres R-Builds finden. Dann wird es jedes Mal automatisch geladen, wenn R geladen wird, und Sie müssen sich darüber keine Sorgen mehr machen. Sie können Pakete einfach aus dem angegebenen Verzeichnis installieren und laden.

Schließlich ist in meiner Rprofile.site ein kleiner Code enthalten, mit dem ich alle Pakete neu installieren kann, wenn ich eine neue R-Version installiere. Sie müssen sie nur auflisten, bevor Sie auf die neue R-Version aktualisieren. Ich mache das mit einer .RData-Datei, die eine aktualisierte Liste mit allen Paketen 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 erstelle die packagelist.RData durch Angabe .Last()in meiner Rprofile.site. Dadurch wird die Paketliste aktualisiert, wenn ich einige installiert habe:

.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 installiere, füge ich einfach die erforderlichen Elemente zur Datei Rprofile.site hinzu und alle Pakete werden neu installiert. Ich muss die Rprofile.site sowieso anpassen (unter Verwendung von Summenkontrasten, Hinzufügen des zusätzlichen Codes für Tinn-R, diese Dinge), damit es nicht wirklich zusätzliche Arbeit ist. Es dauert nur etwas länger, alle Pakete neu zu installieren.

Dieses letzte Bit entspricht dem, was in der ursprünglichen Frage als Lösung angegeben ist. Ich muss mir nur keine Sorgen machen, dass ich zuerst die "installierte" Liste bekomme.

Auch dies funktioniert nicht einwandfrei, wenn Sie Pakete haben, die nicht von CRAN installiert wurden. Dieser Code ist jedoch leicht erweiterbar, um auch diese einzuschließen.

Joris Meys
quelle
2
@ Prasad: Danke. Die Antwort ist allerdings etwas veraltet, R 2.12 und speichert die Pakete, die Sie selbst installieren, automatisch irgendwo in einer Standardbibliothek außerhalb des Haupt-R-Baums. Alles, was Sie jetzt tun müssen, ist sicherzustellen, dass Sie diese Bibliothek finden und mit ihr verknüpfen, falls dies nicht von selbst geschehen ist.
Joris Meys
@ 428790: Wo finde ich die Bibliothek, die Sie erwähnen?
Daniel Krizian
@DanielKrizian Sehen Sie sich die Standardeinstellung im internen Objekt an .Library. In meinem Fall verweist es unverändert auf den R-Installationsordner (was ich besonders nicht mag, aber gut)
Joris Meys
42

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

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

Der beste Weg, dies zu tun, ist das RGui-System. Alle Ihre Pakete werden in den neuen Ordner übertragen und die alten werden gelöscht oder gespeichert (Sie können entweder auswählen). Sobald Sie RStudio erneut öffnen, wird sofort erkannt, dass Sie eine aktualisierte Version verwenden. Für mich hat das wie ein Zauber gewirkt,

Weitere Infos zu {installr} hier .

Simon

SJDS
quelle
2
Was ist mit Paketen, die über Github installiert wurden?
Skan
8
Es sollte erwähnt werden, dass dies für Windows ist.
Beroe
27

Zwei schnelle Vorschläge:

  1. Verwenden Sie Gabors Batchdateien die Tools enthalten sollen, die beispielsweise bei der Verlagerung dieser helfen. Vorsichtsmaßnahme: Ich habe sie nicht benutzt.

  2. Installieren Sie keine Bibliotheken innerhalb des 'Dateibaums' der installierten R-Version. Unter Windows kann ich R in die Version C: / opt / R / R- $ einfügen, aber alle Bibliotheken mit dem folgenden Snippet in C: / opt / R / library / einfügen, da dies das Problem zunächst lindert:

$ cat .Renviron         # this is using MSys/MinGW which looks like Cygwin  
## Example .Renviron on Windows    
R_LIBS="C:/opt/R/library"
Dirk Eddelbuettel
quelle
Ich frage mich, ob das Übertragen von Paketen von beispielsweise R 2.8 auf R.9 Probleme verursacht. Oder wird alles in Ordnung sein, solange Sie ein Update durchführen. Pakete in der neuen Version?
Eduardo Leoni
Ich mache das schon eine ganze Weile und hatte keine Probleme. R ist typischerweise "vorwärtskompatibel". Und IIRC nur ein Upgrade (möglicherweise R 1.9 -> R 2.0) erforderte eine Neuerstellung aller Bibliotheken.
Dirk Eddelbuettel
5
Normalerweise kopiere ich auch einfach meinen Bibliotheksordner in meine neue Installation und führe update.packages aus. Es scheint gut zu funktionieren. Ein optionaler Installationsordner ist jedoch viel eleganter.
kpierce8
Nur um darauf hinzuweisen - ich habe eine Antwort mit R-Code hinzugefügt, der Dirks Vorschlag ausführt (für R-Windows-Benutzer)
Tal Galili
25

Die oben vorgeschlagene Methode funktioniert nicht vollständig, wenn Sie Pakete haben, die nicht von CRAN stammen. Zum Beispiel ein persönliches Paket oder ein Paket, das von einer Nicht-CRAN-Site heruntergeladen wurde.

Meine bevorzugte Methode unter Windows (Upgrade von 2.10.1 auf 2.11.0):

  1. Installieren Sie R-2.11.0
  2. Kopieren R-2.10.0/library/*nachR-2.11.0/library/
  3. Beantworten Sie die Eingabeaufforderungen mit "Nein" und fragen Sie, ob das Überschreiben in Ordnung ist.
  4. Starten Sie R 2.11.0
  5. Führen Sie den Befehl R aus update.packages()
Kevin Wright
quelle
7

In Bezug auf die in der Frage angegebene Lösung ist es möglicherweise nicht einfach, Ihre ältere Version von R auszuführen, wenn Sie die neue Version bereits installiert haben. In diesem Fall können Sie weiterhin alle fehlenden Pakete aus der vorherigen R-Version wie folgt neu installieren.

# 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 list.files()in der ersten Codezeile der Pfad zum Bibliotheksverzeichnis für Ihre vorherige R-Version sein sollte, in dem sich alle Ordner von Paketen in der vorherigen Version befinden. In meinem aktuellen Fall ist dies der Fall "/Library/Frameworks/R.framework/Versions/3.2/Resources/library". Dies ist anders, wenn Ihre vorherige R-Version ist nicht 3.2 oder unter Windows.)

Die ifAnweisung stellt sicher, dass ein Paket nicht installiert wird, wenn

  • Es ist bereits in der neuen R-Version installiert, oder
  • Wurde als Abhängigkeit von einem Paket installiert, das in einer vorherigen Iteration der forSchleife installiert wurde .
Raffaele Vacca
quelle
Dies hat mein Problem gelöst, danke! Diese Frage mag etwas dumm klingen, aber kann ich alte Bibliotheken löschen?
m_c
4

Nach Dirks Vorschlag finden Sie hier einen R-Code für Windows: So aktualisieren Sie R unter Windows XP auf einfache Weise

Update (15.04.11): Ich habe einen weiteren Beitrag zu diesem Thema verfasst, in dem erklärt wird, wie mit allgemeinen Problemen beim Aktualisieren von R unter Windows 7 umgegangen werden kann

Tal Galili
quelle
2
Für die neuesten Versionen von R hat Tal ein Paket namens, installrdas diesen Prozess automatisiert (derzeit nur unter Windows). R-statistics.com/tag/installr oder github.com/talgalili/installr
Louis Maddox
1
Führen Sie Rgui.exe unter C: \ Programme \ R \ R-3.6.0 \ bin \ i386 aus und schreiben Sie den Code in die Konsole : install.packages(installr); library(installr); updateR(TRUE). Am Ende [1] TRUEerscheint. Durch Galilis exzellentes Paket bin ich sehr einfach von R 3.6.0 auf R 3.6.1 übergegangen. Danke Tal.
Erdogan CEVHER
2

Zwei Optionen:

  1. Implementiere meine Antwort hier
  2. Wenn Sie R unter Eclipse mit StatET verwenden, öffnen Sie Konfigurationen ausführen , klicken Sie auf die Registerkarte Konsole und fügen Sie im Feld R-Snippet-Ausführung nach dem Start diese Zeile mit dem Verzeichnis Ihrer Wahl hinzu:.libPaths("C:/R/library")
Fred
quelle
1

Ich bin unter Windows 8 und aus irgendeinem seltsamen Grund kann ich niemals Pakete über meine Internetverbindungen installieren.

Ich installiere es im Allgemeinen mit der ZIP-Datei von CRAN.

Nachdem ich von R 3.2.5 auf R 3.3.1 gegangen bin.

Ich habe einfach die Pakete von kopiert

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

Und dann habe ich die R-Sitzung neu gestartet. Hat perfekt funktioniert. Ich habe nicht überprüft, ob ALLE Pakete gut funktionieren. Aber die, die ich überprüft habe, funktionieren einwandfrei. Hoffe, dieser Hack funktioniert für alle.

Prost.

Pragyaditya Das
quelle
1

Die akzeptierte Antwort könnte funktionieren, wenn Sie vorausschauend sind, aber ich hatte die alte Version bereits entfernt und konnte diesen Anweisungen nicht folgen. Die unten beschriebenen Schritte funktionierten für das OSX-Upgrade von 2.1 und 3.1.

AKTUALISIERT: Um das Verzeichnis für Ihre neueste Version abzurufen (anstatt 3.1 oder 3.2 einzugeben), können Sie die folgenden Befehle verwenden. Die zweite konvertiert direkt in die R-Variable, überspringt .und ..und .DS_Storeverwendet:

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

(Fügen Sie |pbcopyam Ende hinzu, um es direkt in Ihre Mac-Zwischenablage zu kopieren.)

Dann können Sie in R die generierte Variable einfügen. Sobald dies in der neuen Version von R definiert ist, können Sie die installierten Pakete anhand der obigen Anweisungen durchlaufen ...

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

Für mich ist diese Seite gut https://www.r-statistics.com/2013/03/updating-r-from-r-on-windows-using-the-installr-package/ oder eine andere Option ist einfach die neue zu installieren Option und am Ende setzen Sie, zum Beispiel in Windows 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 Pfad der letzten Version in meinem Fall, in den ich immer den ersten Pfad eingefügt habe, ist "D: /Documents/R/win-library/3.2", der festgelegt ist, und dann habe ich den anderen eingefügt, weil Sie keine Pakete kopieren oder verschieben müssen Mein Sugest nennt es einfach

juanprimate
quelle
0

linux+ bash+ debian+ aptBenutzer:

  1. Wenn Sie auf die neueste Version von installieren / aktualisieren, Rgehen wir möglicherweise davon aus, dass Sie über rootBerechtigungen verfügen . (Nicht unbedingt erforderlich, vereinfacht nur den Vorgang erheblich. Aus Gründen der Konsistenz wird das folgende Skript sudofür alle Installationen verwendet.) Da die RPakete auch von installiert werden root, ist es daher zulässig, diese zu platzieren /usr/local/.

  2. Der Aufruf von curlunten setzt voraus, dass Sie bereits an der sidVeröffentlichung der Rneuesten instabilen Version interessiert sind (wie beim Erstellen / Überprüfen eines RPakets erforderlich )

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

    obwohl dies leicht durch eine neuere stabile Version ersetzt werden könnte, z buster.

  3. Beachten Sie, dass ich nicht einen mit Schlüssel wie normalerweise empfohlen . Dies ist nicht unbedingt erforderlich, insbesondere wenn wir (wie im folgenden Skript) Pakete in sich R selbst installieren (siehe Rscript -eunten). Außerdem neigen solche Schlüssel dazu, alle paar Jahre zu brechen / sich zu ändern. Daher können Sie der folgenden Datei natürlich das folgende Vorwort hinzufügen R.sh:

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

  4. Die arrayvon RPaketen ist eindeutig nicht erschöpfend , sondern gibt einige Beispiele , die ich persönlich nützlich finden. Eine Neuinstallation / Aktualisierung mit dem debianPaket r-recommended(siehe unten) sollte die neueste Version aller empfohlenen Standardpakete (z survival. B. ) enthalten. Ich glaube, es kann eine leichte Verzögerung zwischen einer CRAN-Version und einem Update des entsprechenden debianPakets geben. Daher möchten Sie möglicherweise einige davon zu den arrayfolgenden hinzufügen, wenn die neueste Version eines empfohlenen RPakets erforderlich ist.

  5. Die im folgenden Prozess installierten debianPakete sind weder wesentlich (für die Verwendung r-base) noch vollständig, bieten jedoch eine Nr. von 'Add-Ons', die für eine vernünftige Nr. wichtig sind. von RPaketen.

Wie auch immer ... platzieren Sie Folgendes 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 es dann aus, z. B. unter der Annahme, dass bereits im Verzeichnis: source R.sh .

Installieren von Paketen (ob debianoder R) one-by-one in einer Schleife von dem Shell ist etwas ineffizient, aber ermöglicht eine einfachere Rückverfolgung von Fehlern, IMHO. Kann je nach Nr. Einige Zeit dauern. von RPaketen, also vielleicht am einfachsten über Nacht laufen zu lassen ...

Dardisco
quelle
1
Ich bin mir nicht sicher, warum "Überleben" in dieser Liste der Zusatzpakete enthalten ist. (Und es ist durchaus möglich, dass ich dieses Bash-Skript irreführe.) Es ist seit ... für immer ein "empfohlenes" Paket. Wenn Sie nicht alle empfohlenen Pakete mit diesem Skript installieren, sollte es dazu geändert werden. Denken Sie auch daran, dass der r-base-devel-Satz von Paketen für jeden benötigt wird, der Linux verwendet. Und warum nicht die PPA von Michael Rutter hinzufügen?
IRTFM
Danke dir! Aktualisiert im Lichte Ihrer hilfreichen Kommentare. Stimmen Sie zu, es ist nicht erforderlich, routinemäßig ein Paket zu installieren, das bereits enthalten ist r-recommended. 'r-base-devel' ist bekannt als r-base-dev( debianPaket) - war bereits enthalten. Ich bin nicht abgeneigt, einen Schlüssel für die Sicherheit zu verwenden (Antwort aktualisiert). Die Antwort hält sich von der Verwendung eines PPA= Personal Package Archives fern, da diese notwendigerweise von einer Person abhängig und daher möglicherweise fehlbar sind. Wie Michael Rutter selbst (2012) sagt: "Wenn Sie CRAN verwendet haben, gibt es keinen Grund, auf die PPA umzusteigen, da an beiden Standorten dieselben Pakete bereitgestellt werden."
Dardisco