8 Stimmen

Aktualisieren von Paketen in R - Auswirkungen von checkBuilt = TRUE oder FALSE

Ich habe mir die Hilfe für update.packages(..., checkBuilt = TRUE) und es ist mir unklar, warum man nicht in der Lage sein sollte TRUE als Standardeinstellung. Der Standardwert ist FALSE .

Diese Frage hat zwei Teile. (1) Kann jemand eine klare Erklärung für die Verwendung dieses Arguments und eine Begründung für entweder FALSE o TRUE ?

So wie ich es verstehe, kann ein Update von R zu unterschiedlichen Ergebnissen führen - wenn die Pakete nicht aktualisiert wurden, dann FALSE wird nicht dazu führen, dass die lokalen Bibliotheken mit aktualisierten Paketen verändert werden, während TRUE wird dazu führen, dass mehr (alle?) Pakete aktualisiert werden. Die Standardoption ( FALSE ) kann einen Geschwindigkeitsvorteil bringen - es werden weniger Pakete aktualisiert. Die Stabilität ist ungewiss - eine neue Version von R kann mit einem neuen Paket besser funktionieren oder auch nicht (z.B. wenn es Regressionen/Bugs im neuen Paket gibt), und es kann mit der früheren Version des Pakets funktionieren oder auch nicht (Abwärtskompatibilität ist nicht garantiert). Andere Vor- und Nachteile sind für mich nicht offensichtlich. (Und es kann sein, dass ich mich hier völlig irre - deshalb bitte ich um eine Klärung als Teil 1).

(2) Wenn man jedoch die installierte Version von R nicht geändert hat, sollten diese dann nicht das gleiche Ergebnis haben? Siehe diese Stelle für ein Beispiel, bei dem es scheint, dass der Aufruf von update.packages() Probleme verursacht, obwohl sich die Version von R nicht geändert hat.

10voto

Calimo Punkte 6675

CheckBuilt = TRUE ist besonders nützlich für größere Upgrades wie 2.14.0, die große Änderungen in den Namespaces mit sich brachten. Pakete ohne Namespace, die mit einer früheren Version von R erstellt wurden, müssen neu kompiliert werden, da sie sonst überhaupt nicht geladen werden können. Wenn Sie also ein solches Paket haben (wie z.B. ICE ) in R 2.13 installiert ist und Sie auf R 2.14 aktualisieren, können Sie es nicht mehr laden:

> library(ICE)
Error in library(ICE) : 
  package ‘ICE’ does not have a NAMESPACE and should be re-installed

Da es keine neuere Version mit einem Namespace gibt, wird update.packages() die Version nicht aktualisieren, ohne CheckBuilt = TRUE . Also mit den Worten update.packages(checkBuilt = TRUE) sagen Sie deutlich, aktualisieren Sie alle Pakete, wenn entweder:

  • Es gibt eine neuere Version im CRAN
  • ODER installieren Sie das Paket neu, wenn es mit einer älteren Version von R erstellt wurde.

En wird nicht Pakete modifizieren, die in der gleichen Version von R kompiliert wurden und ohne Upgrade auf dem CRAN verfügbar sind. CheckBuilt bedeutet eigentlich "neu installieren, wenn in einer älteren Version kompiliert", nicht "alle Pakete neu installieren".

Warum ist sie standardmäßig FALSCH? Ich vermute, dass es eine enorme Belastung für CRAN darstellt und die meiste Zeit nicht notwendig ist: Ich habe noch nie ein Problem nach einem kleineren Upgrade gesehen (z.B. R 2.13.0 auf 2.13.1). Ich würde auf jeden Fall empfehlen, es nach einem größeren Upgrade wie 2.13.1 auf 2.14.0 zu machen.

Ich glaube, dass der spezielle Fall, den Sie in (2) erwähnen, eine Ausnahme darstellt. Er beinhaltet die Aktualisierung von Paketen, die mit apt installiert wurden und nicht von R. Man kann nicht wirklich auf einen solchen Segfault-Bug schließen. Und überhaupt, wenn CheckBuilt = TRUE aktualisiert hat, bedeutet dies, dass es in einer früheren Version von R erstellt wurde.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X