2016-05-26 8 views
1

Was ist eine gute Möglichkeit, den Stand der Entwicklung zu verfolgen und/oder zu visualisieren, wie all Ihre R-Pakete miteinander verknüpft sind (und die Abhängigkeiten von Drittanbietern)?Visualisierung und Verfolgung Ihres Paketentwicklungsstatus

Normalerweise versuche ich eine "teile und herrsche" -Strategie anzuwenden, die mittlerweile - 5 Jahre später - zu einer Menge Pakete mit einem klaren Funktionsumfang führt. Aber ich habe einen Zustand erreicht, in dem die Dinge (so wahrnehmbar) so verstreut sind, dass ich nicht mehr alle Abhängigkeiten und "wo sind die Legostücke, die ich für ein konkretes Projekt benötige" umkreiste: -/

Also ich denke, ich bin auf der Suche nach

  1. eine Kartendarstellung aller Paketabhängigkeiten
  2. einig „-Paket Entwicklungsmanagement“ framework/Strategie mit minimalem Platzbedarf
+1

Wenn Sie eine Tabelle aller abhängigen Pakete haben möchten, steht Ihnen hier ein Code-Snippet zur Verfügung: https://github.com/aryoda/R_pkg_dependencies –

Antwort

1

Dies ist eine Möglichkeit, es zu tun , aber es gibt sicherlich andere gute Alternativen. Ein einfacher Weg, einen Verweis auf alle Pakete zu bekommen ist mit ìnstalled.packages(). Wenn Sie mehrere Bibliotheken und Interpreter zum Trennen von Projekten haben, können Sie den Bibliotheksspeicherort für jedes Projekt mit lib.loc angeben. Dadurch erhalten Sie Matrizen mit Paketen und deren Informationen. Eine der Spalten ist "Priorität". Basispakete setzen dies auf "empfohlen" oder "Basis". Wenn Sie anfangen, "meins" oder etwas ähnliches zu Ihrem eigenen hinzuzufügen, ist das ein einfacher Weg, Ihre eigenen Pakete herauszufiltern.

Holen Sie die Matrix aus jeder Bibliothek, die Sie haben, indem Sie Ihre Bibliothekspfade angeben.

Um Ihre eigenen Pakete zu finden, entfernen Sie die Liste der Pakete von den Repositories, die Sie normalerweise verwenden, z. für Kran mypkgs <- setdiff(installed.packages()[,1], available.packages()[,1]). Dann subtrahieren Sie die Basispakete, mypkgs <- setdiff(mypkgs, basePkgs). basePkgs stammt von miniCran und Filter basierend auf Priorität wie oben erwähnt. Sie sollten dann eine Liste der Pakete haben, die Sie selbst erstellt haben.

Dann verwenden Sie makeDepGraph von miniCran. Es enthält den Paketnamen und Informationen zu Abhängigkeiten. Sie können es mit installed.packages bereitstellen, oder wenn Sie mehrere Bibliotheken haben, reduzieren Sie einfach die Matrizen mit rbind und entfernen Sie die Duplikate. Dann plotten Sie es mit Handlung.

Wenn Sie nur die Abhängigkeiten zwischen Ihren eigenen Paketen sehen möchten, filtern Sie die anderen Pakete wie oben und liefern Sie diese zu makeDepGraph.

Ein Beispiel: Ich habe eine Basisinstallation für verschiedene R-Sachen und eine andere Bibliothek für ein aktuelles Projekt mit einem isolierten Interpreter. Hier ist ein Beispiel mit dem Paket "flowCore" (nicht von mir geschrieben). Es stammt vom Repository des Bioconductors. Aus Gründen der Argumentation subtrahiere ich keine Bioconductor-Pakete und gehe davon aus, dass dies meine sind, um Ihre Frage besser zu beantworten.

require("miniCRAN") 
#get package info 
inst<-installed.packages() 
other_inst<-installed.packages("/Users/lovetatting/Desktop/flowproj/lib/R-3.3.0/library") 
cran<-available.packages() 
#pick out your own packages 
mypkgs<-lapply(list(inst, other_inst), function(inst){ 
    mine<-setdiff(
    setdiff(
     inst[,1], cran[,1]), 
    basePkgs()) 
}) 
#aggregate 
mypkgs<-Reduce(union, mypkgs) 
allpkgs<-Reduce(rbind, list(inst, other_inst)) 

plot(makeDepGraph("flowCore", allpkgs, suggests=F)) 

Diese im Abhängigkeitsgraphen führen unter

enter image description here

Wenn Sie speziellere Anforderungen an der Nachverfolgung von Abhängigkeiten haben, können Sie immer mit der Info Form installed.packages rumspielen. Für die Paketentwicklung habe ich selbst eine kleine Bibliothek von Bash-Funktionen, hauptsächlich Wrapper um Aufrufe für R CMD ... und Devtools. Aber auch um Ärger wie die Einschränkung der Ordnerhierarchie im R-Ordner zu beheben (ich bündle alles und installiere das).