2012-09-20 2 views
5

Ich schreibe ein Protokoll für eine reproduzierbare Analyse mit einem Inhouse-Paket "MyPKG". Jeder Benutzer wird seine eigenen Eingabedateien bereitstellen; Außer den Eingaben sollten die Analysen unter denselben Bedingungen ausgeführt werden. (z. B. so, dass wir daraus schließen können, dass unterschiedliche Ergebnisse auf verschiedene Eingabedateien zurückzuführen sind).Wie kann ich eine konsistente R-Umgebung zwischen verschiedenen Benutzern auf demselben Server sicherstellen?

MyPKG wird gerade entwickelt, daher wird library(MyPKG) geladen, was auch immer die letzte Version war, die der Benutzer in seiner lokalen Bibliothek kompiliert hat. Es lädt auch alle Abhängigkeiten in ihren lokalen Bibliotheken.

Aber ich möchte, dass jeder eine bestimmte Version (MyPKG_3.14) für diese Analyse verwendet, während immer noch die Entwicklung neueren Versionen erlaubt. Wenn ich richtig verstehe, wird "R --vanilla" die gleichen Abhängigkeiten für alle laden.

Sobald wir fertig sind, werden wir die Arbeitsumgebung als VM speichern, um eine stabile reproduzierbare Umgebung zu erhalten. Also eine vorübergehende (6 Monate) Lösung wird ausreichen.

Ich habe zwei mögliche Lösungen gefunden, bin mir aber nicht sicher, ob beides ausreicht.

  1. fragen Sie die Server-Admin MyPKG_3.14 in den Standard-R-Pfad zu installieren und dann im Protokoll den folgenden Code zur Verfügung stellen:

    R --vanilla 
    library(MyPKG) 
    .... 
    

    oder

  2. Kompilierung MyPKG_3.14 in a spezifische Bibliothek, z lib.loc = "/home/share/lib/R/MyPKG_3.14", und dann

    R --vanilla 
    library(MyPKG) 
    

  • ausreichend beiden Ansätze sind, um sicherzustellen, dass jeder läuft die gleiche Version?
  • Ist einer der anderen vorzuziehen?
  • Gibt es andere unvorhergesehene Probleme, die auftreten können?
  • Gibt es eine bevorzugte Option für die Standardisierung der Mehrfachanalysen?
  • Sollte ich einen Test der Ausgabe von SessionInfo() einschließen?
  • Wäre es besser, einen einzigen Account auf dem Server zu erstellen, den jeder nutzen kann?
+0

Große Frage. Ich arbeite an diesem Thema als Teil eines größeren Projekts und plane, eine Bibliothek zu veröffentlichen, die nach jeder Ausführung Herkunftsspuren erzeugt. Es wäre einfach, zwei Traces zu vergleichen und zu sehen, ob der Unterschied nur neue Daten oder neue Bibliotheken sind, und man könnte sie nach Bedarf ändern, wenn unterschiedliche Ergebnisse angezeigt werden. Mailen Sie mir für weitere Details. – Maiasaura

+0

@Maiasaura Ich sehe Ihre E-Mail nicht. Beginnt es mit Kram? –

+0

ja. berkeley dot edu – Maiasaura

Antwort

1

Paar Punkte:

  • Verwenden systemweite Installationen von Paketen, z.B. die Debian/Ubuntu-Binärdatei für R (einschließlich der CRAN-Ports) wird versuchen, /usr/local/lib/R/site-library zu verwenden (die Benutzer auch installieren können, wenn sie der Gruppe hinzugefügt werden, die das Verzeichnis besitzt). Auf diese Weise erhält jeder die gleiche Version
  • Verwenden Sie systemweite Konfiguration, z. bevorzugen $R_HOME/etc/ über die dotfiles unter ~/. Aus dem gleichen Grund bietet das Debian/Ubuntu-Paket in /etc/R/
  • softlinks an. Verwenden Sie R facilties, um seine Pakete abzufragen (zB installed.packages()), um Pakete und Versionen zu melden.
  • Verwenden Sie, sofern verfügbar, OS-Level-Funktionen zum Abfragen der Betriebssystemversion und -version. Dies ist jedoch weniger standardisiert.

In Bezug auf den letzten Punkt meiner Box zu Hause sagt

> [email protected]:~$ lsb_release -a | tail -4 
> Distributor ID: Ubuntu 
> Description: Ubuntu 12.04.1 LTS 
> Release:  12.04 
> Codename:  precise 
> [email protected]:~$ 

, die einen Start.

+0

+ 1 sehr hilfreicher Rat, den du mir kürzlich gegeben hast, um "~/R/x86_64-pc-linux-gnu-library/2.15" zu entfernen – GSee

Verwandte Themen