21 Stimmen

Welches nützliche R-Paket gibt es derzeit nicht?

Ich habe an ein paar R-Paketen für einige allgemeine Tools gearbeitet, die derzeit nicht in R verfügbar sind: Blogging, Report Delivery, Logging und Scheduling. Dies brachte mich zu der Frage: Was sind die wichtigsten Dinge, die Menschen Wunsch die es in R gibt und die derzeit nicht verfügbar sind?

Ich hoffe, dass wir auf diese Weise einige Lücken ausfindig machen und möglicherweise gemeinsam an ihnen arbeiten können.

1voto

Nestor Punkte 13240

Eine native .NET-Schnittstelle zu RGUI. R(D)Com basiert auf COM und erlaubt nur den Austausch von Matrizen, nicht von komplexeren Strukturen.

1voto

Iterator Punkte 19883

Ich würde sehr gerne einen Line Profiler verwenden. Dieser existiert in Matlab und Python und ist sehr nützlich, um Codeteile zu finden, die viel Zeit benötigen oder mehr (oder weniger) als erwartet ausgeführt werden. Ein großer Teil meines Codes beinhaltet Funktionsoptimierungen, und wie oft etwas iteriert wird, ist möglicherweise nicht im Voraus bekannt (obwohl die meisten Iterationen eingeschränkt oder festgelegt sind).

Der Aufrufstapel ist nützlich, wenn Ihr gesamter Code in R vorliegt und sehr einfach ist, aber als Ich habe kürzlich darüber geschrieben Wenn Ihr Code komplex ist, ist das eine mühsame Arbeit.

Es ist recht einfach, einen Zeilen-Profiler für einen bestimmten Teil des Codes zu entwickeln. Ein naiver Weg ist es, jede Zeile (oder nur vorher festgelegte Abschnitte) zu indizieren und einen Aufruf von log einzufügen proc.time() diese Zeile. In einer Schleife zähle ich einfach Codeabschnitte auf und speichere in einer zweidimensionalen Liste die proc.time Werte für Abschnitt i nach und nach k . (Siehe Update unten: dies ist nicht wirklich eine Möglichkeit, einen Line Profiler für alle Arten von Code zu erstellen).

Mit einem solchen Tool kann man Hotspots, Anomalien (z. B. Code, der eigentlich O(n) sein sollte, aber in Wirklichkeit O(n^2) ist), Code, der von einer Memoisierung profitieren könnte (ein Line Profiler sagt Ihnen das nicht, aber er lässt Sie wissen, wo Sie suchen müssen), Code, der sich fälschlicherweise innerhalb einer Schleife befindet, und vieles mehr finden.

Aktualisierung 1: Die Einfügung einer Timing-Zeile zwischen jeder Funktionszeile ist ein kleiner Fehler: Die Definition einer Codezeile ist nicht einfach durch Leerzeichen getrennter Code. Um zu wissen, wo Operationen beginnen und enden, muss man in der Lage sein, den Code in einen AST zu zerlegen. Wie in einigen der Antworten auf diese Frage gibt es einige Werkzeuge (namentlich, showTree y walkCode im codetools Paket) für diese Aufgabe. Einfach einen regulären Ausdruck auf den Quellcode anzuwenden, wäre eine sehr schlechte Idee.

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