In einer meiner Arbeiten liste ich neben einigen Zahlen auch einige numerische Ergebnisse auf. Ich möchte sicherstellen, dass die numerischen Ergebnisse in meinem Artikel immer mit dem Code übereinstimmen. Im Moment kopiere ich die numerischen Ergebnisse von meiner Simulationsausgabe direkt in das Papier, was extrem einfach und technisch einfach, aber fehleranfällig ist, da ich die Ergebnisse falsch kopieren oder vergessen könnte, die Papierergebnisse mit den zu synchronisieren Code-Ausgabe.
Gibt es eine gute Möglichkeit, die numerischen Ergebnisse, die ich in meinen Artikeln zitiere, mit den Ergebnissen meines Codes zu synchronisieren? (Hier gehe ich davon aus, dass die Ausführung des Codes einfach und praktisch ist, wenn ich mein Papier aktualisieren möchte.) Diese numerischen Ergebnisse lassen sich nicht unbedingt in Tabellenform anzeigen. Manchmal habe ich Tabellen in Manuskripten, aber häufiger habe ich Simulationsparameter als Zahlen in Gleichungen aufgeführt . Ein Beispiel wäre so etwas wie:
Hier möchte ich die Elemente der Anfangsbedingung durch die tatsächlichen Parameter ersetzen, die ich in einer Simulation verwende, die ein System gewöhnlicher Differentialgleichungen numerisch integriert. Die Verwendung einer Tabelle für einmalige Daten wie dieses Beispiel scheint zu viel zu bedeuten und mehr Tinte als erforderlich.
Ich gehe davon aus, dass Zahlen ein einfacherer Fall sind: Wenn das Dokument "erstellt" wird (aus LaTeX-Quelle, Markdown, RST usw.), starten Sie den Erstellungsprozess durch Ausführen des Codes. Wenn die Leute jedoch bessere Vorschläge haben, um die von meinen Simulationen erzeugten Zahlen mit meinem Papier synchron zu halten, würde ich sie gerne hören.
quelle
spin()
Funktion durchführen. Persönlich denke ich, dass Greg Wilsons Beschwerden über Lese- und Schreibprogramme ziemlich veraltet sind. Ich hatte die gleiche schreckliche Erfahrung, die er mit noweb beschreibt, aber dieses verschlungene Debugging existiert in den modernen Tools einfach nicht. Zum Lesen und Schreiben verwende ich Sauerstoff. Knitr ist dank Caching und Umgebungshandling einfacher zu debuggen als R.Was Sie fordern, ist die große Herausforderung von Elsivier für das "Executable Paper" . Obwohl viele Ansätze ausprobiert wurden, sind keine so überzeugend, wie die Autoren vermuten. Hier einige Beispiele für angewandte Techniken.
Madagascar Project verfolgt Ihren Ansatz, innerhalb des make-Skripts werden die Simulationen ausgeführt, die die Figuren und das Papier gleichzeitig produzieren.
IPython Notebook bietet ein Dokument, das Sie ausführen können, wenn Sie nach Herzenslust Zahlen lesen und produzieren. (Ich habe Word-Plugins, Mathematica und zahlreiche andere Lösungen gesehen, die auf dieselbe Weise verwendet wurden.)
VisTrails verwendet einen serviceorientierten Architekturansatz und bietet einen "Providence" - oder "Workflow" -Manager. Grundsätzlich registrieren Sie Hooks für den Code und entwerfen dann einen Arbeitsablauf oder ein Experiment, das Ihre Arbeit reproduziert. Es wurde für viele Arten von Codes verwendet, sogar für HPC-Cluster. Mit diesem Ansatz können Sie die Experimente nachvollziehen.
Es gibt Unmengen solcher Lösungen, aber das sind drei, von denen ich beeindruckt war. Es ist ein hartes Problem und ich glaube, wir sind nicht einmal in der Nähe der Adressierung. Wir können nicht einmal Leute dazu bringen, ihren Code mit ihren Papieren zu veröffentlichen. Wie können wir erwarten, dass sie die Ergebnisse reproduzieren? = P
quelle
Ich hatte nicht viel Erfolg darin, die Lösungen anderer Leute für dieses Problem zu verwenden. Normalerweise möchte ich nur etwas Einfaches, das für mich funktioniert und die Arbeit erledigt. Zu diesem Zweck versuche ich im Allgemeinen, ein Python-Skript zu schreiben, das alle Ergebnisse ausführt, die Ausgabe analysiert und die Abbildungen / Tabellen erstellt.
Ich schreibe meine Codes, um Datendateien zu generieren, die die Ergebnisse in einem Textformat enthalten. Sie können vermeiden, dass diese Ergebnisse in Ihrem Skript erneut ausgeführt werden, indem Sie zunächst prüfen, ob die Ausgabedatei vorhanden ist (in Python beispielsweise mit os.path.isfile ()). Wenn Sie Ihre Ergebnisse erneut ausführen möchten, entfernen Sie einfach die Datendateien. Wenn die Datendateien vorhanden sind, führe ich einen Parser dieser Dateien aus. Dafür ist das Python-Modul für reguläre Ausdrücke sehr nützlich (re).
Dann erstelle ich aus der analysierten Ausgabe die Zahlen oder Tabellen. Bei Latex-Tabellen können Sie den Code zum Generieren der Tabelle in eine separate Datei schreiben (ich verwende die Erweiterung .tbl) und diese dann in Ihre Latex-Datei einfügen. Der Schlüssel für mich ist, 1 Python-Skript zu verwenden. Wenn ich viele habe, frage ich mich später, welche welche sind und was sie tun. Wenn diese Beschreibung zu vage ist, kann ich Ihnen einige Beispiele schicken.
quelle
\input{|"path-to-script.py"}
. Ich denke, Sie sollten alle Parameter in eine einzige Python- (oder welche Sprache auch immer Ihre Lieblings-) Datei schreiben und Befehlszeilenparameter verwenden, um darauf zuzugreifen\input{|"path-to-script.py param-name"}
. In diesem Fall können Sie die param-Datei in andere Skripte einbinden, um die Simulationen auszuführen. Es verlangsamt jedoch die Kompilierung und weist einige andere negative Punkte auf.Noch wichtiger ist meiner Meinung nach, dass Sie herausfinden können, wie Sie alle Ihre Ergebnisse in einem Monat oder einem Jahr von Grund auf neu generieren können (zum Beispiel, wenn Schiedsrichter Sie auffordern, etwas hinzuzufügen oder zu ändern). Zu diesem Zweck schließe ich eine Textdatei mit sehr detaillierten Anweisungen zur Reproduktion aller Ergebnisse ein. Testen Sie diese am besten, indem Sie sie von einer anderen Person (z. B. einem Co-Autor) ausprobieren lassen. Ich empfehle, dass Sie diese Anleitung (und Ihren gesamten Code) auch den Schiedsrichtern und Lesern zur Verfügung stellen.
Hier ist ein Beispiel (tatsächlich erstellt von meinem Mitautor Aron Ahmadia).
quelle
Emacs Orgmode in Kombination mit Babel schafft das. Babel kann Code-Schnipsel aus verschiedenen Programmier- und Skriptsprachen ausführen, z. B. die Datei mit den Simulationsdaten öffnen und sie im orgmode in eine Tabelle einfügen, die nach LaTeX (und vielen anderen Formaten) exportiert werden kann. Es dauert eine Weile, bis man sich an alle Tastenkombinationen im Orgmode gewöhnt hat, aber sobald sie ausgeführt werden, erfolgt alles automatisch.
quelle
Wenn Ihr gesamter Code billig ist, könnten Sie etwas Low-Teches tun, wie das Folgende:
Sie können Ihre Dokumente mit formatierten Zeichenfolgen so vorlegen, dass sie so aussehen
Haben Sie Python-Skripte, die so aussehen
Und dann mach so etwas
Sie können dies dann in ein Makefile einwickeln.
quelle
Wenn Sie LaTeX verwenden, besteht eine relativ einfache Lösung darin, Ihren Code aus einer Datei ausspucken zu lassen (oder mithilfe eines Skripts aus der Codeausgabe herauszufiltern), die eine ganze Reihe von Zeilen wie diese enthält:
\newcommand{\myresults1}{<value>}
Anschließend können Sie mit dem
\input
Befehl diese Datei in Ihr Dokument einfügen und die definierten Befehle verwenden, um die Werte zu platzieren.quelle
Ich arbeite für Elsevier. Mein Unternehmen hat damit begonnen, das Collage-Framework (das als Reaktion auf die "Executable Paper Grand Challenge" entwickelt wurde) in Zeitschriftenausgaben zu verwenden, damit Autoren mit ihrem Artikel ausführbaren Code veröffentlichen können. Diese Funktion erleichtert es den Lesern, die im Artikel gemeldeten Ergebnisse zu reproduzieren und veröffentlichtes Material für ihre eigene Forschung wiederzuverwenden. Collage unterstützt eine Vielzahl von Open-Source- und proprietären Programmen. Weitere Informationen finden Sie im Informationsvideo hier und auf der Collage Authoring Environment-Website .
quelle