В одной из моих работ я перечисляю некоторые числовые результаты в дополнение к некоторым цифрам. Что я хотел бы сделать, так это убедиться, что числовые результаты в моей статье всегда соответствуют коду. Прямо сейчас я просто напрямую копирую числовые результаты из моих результатов моделирования в документ, который является чрезвычайно простым и не требующим больших усилий, но подверженным ошибкам, потому что я мог ошибочно скопировать результаты или забыть синхронизировать результаты работы с документом. вывод кода.
Есть ли хороший способ синхронизировать числовые результаты, которые я цитирую в своих статьях, с результатами, сгенерированными моим кодом? (Здесь я предполагаю, что выполнение кода легко и практично делать всякий раз, когда я хочу обновить свою статью.) Эти числовые результаты не обязательно поддаются табличной форме. Иногда у меня есть таблицы в рукописях, но чаще у меня есть параметры моделирования, перечисленные в виде чисел в уравнениях . Примером будет что-то вроде:
где я хотел бы заменить элементы начального условия фактическими параметрами, которые я использую в моделировании, которое численно интегрирует систему обыкновенных дифференциальных уравнений. Использование таблицы для одноразовых данных, таких как этот пример, кажется излишним и требует больше чернил, чем необходимо.
Я предполагаю, что рисунки - более простой случай: всякий раз, когда документ «собирается» (из исходного кода LaTeX, Markdown, RST и т. Д.), Запускайте процесс сборки, выполняя код. Однако, если бы у людей были более точные предложения по синхронизации данных, сгенерированных моими симуляциями, с моей статьей, я бы хотел их услышать.
источник
spin()
функции. Лично я думаю, что жалобы Грега Уилсона на грамотное программирование довольно устарели. У меня был такой же ужасный опыт, который он описывает с noweb, но эта запутанная отладка просто не существует в современных инструментах. Для грамотного CI используйте doxygen. Knitr легче отлаживать, чем R, благодаря кешированию и обработке окружения.То, о чем вы просите, - это грандиозный вызов Эльзивье «Исполняемой бумаги» . Хотя многие подходы были опробованы, ни один из них не настолько убедителен, как могли бы предположить авторы. Вот несколько примеров используемых методов.
Проект Madagascar принимает ваш подход, в скрипте make запускаются симуляции, которые производят рисунки и бумагу одновременно.
IPython Notebook предоставляет документ, который можно выполнить по мере того, как вы читаете и создаете рисунки для вашего сердца. (Я видел плагины для слов, Mathematica и множество других решений, используемых таким же образом)
VisTrails использует подход к сервис-ориентированной архитектуре и предоставляет менеджера «Providence» или «Workflow». По сути, вы регистрируете хуки для кода, а затем создаете рабочий процесс или эксперимент, воспроизводящий вашу работу. Он использовался во многих типах кодов, даже в кластерах HPC. При таком подходе у вас будет возможность повторить эксперименты.
Существует множество подобных решений, но я впечатлен этими тремя. Это сложная проблема, и я считаю, что мы на самом деле даже не близки к решению. Мы даже не можем заставить людей выпустить свой код со своими бумагами, как мы можем ожидать, что они воспроизведут результаты = P
источник
У меня не было большого успеха в использовании решений этой проблемы других людей. Я обычно просто хочу что-то простое, что работает для меня и выполняет свою работу. С этой целью я обычно пытаюсь написать один скрипт на python, который отвечает за выполнение всех результатов, анализ выходных данных, а также за построение рисунков / таблиц.
Я пишу свои коды для генерации файлов данных, которые содержат результаты в каком-то текстовом формате. Вы можете избежать повторного запуска этих результатов в своем скрипте, сначала проверив наличие выходного файла (например, в python, используя os.path.isfile ()). Если вы хотите перезапустить результаты, просто удалите файлы данных. Если файлы данных существуют, я запускаю парсер этих файлов. Для этого очень полезен модуль python для регулярных выражений (re).
Затем из проанализированного вывода я создаю рисунки или таблицы. Для таблиц в латексе вы можете написать код для генерации таблицы в отдельный файл (я использую расширение .tbl), а затем включить его в свой файл латекса. Для меня они ключом является использование 1 скрипта Python. Если у меня их много, то мне потом интересно, кто из них и что они делают. Если это описание слишком расплывчато, я могу отправить вам несколько примеров.
источник
\input{|"path-to-script.py"}
. Я думаю, что вам лучше поместить все параметры в один файл Python (или любой другой язык, который вам нравится) и использовать параметр командной строки для доступа к нему, как\input{|"path-to-script.py param-name"}
. В этом случае вы можете включить файл param в другие скрипты для запуска симуляции. Однако это замедляет компиляцию и имеет некоторые другие отрицательные моменты.Еще более важным, на мой взгляд, является обеспечение того, чтобы вы могли выяснить, как заново сгенерировать все свои результаты с нуля за месяц или год (например, когда судьи просят вас добавить или изменить что-то). Для этого я включаю текстовый файл с подробными инструкциями о том, как воспроизвести все результаты. Лучше всего, если вы протестируете их, если кто-то другой (например, соавтор) попробует их. Я рекомендую вам также предоставить эти инструкции (и весь ваш код) рецензентам и читателям.
Вот пример (на самом деле подготовленный моим соавтором Ароном Ахмадией).
источник
Orgmode Emacs в сочетании с Babel достигает этого. Babel может выполнять фрагменты кода из различных языков программирования и сценариев, например, он может открыть файл, содержащий данные моделирования, и поместить его в таблицу в режиме orgmode, который можно экспортировать в LaTeX (и во многие другие форматы). Требуется много времени, чтобы привыкнуть ко всем комбинациям клавиш в orgmode, но после запуска все происходит автоматически.
источник
Если запуск всего вашего кода обходится дешево, вы можете сделать что-то низкоуровневое, например:
Вы можете шаблонизировать ваши документы с форматированными строками, чтобы они выглядели так
Есть сценарии Python, которые выглядят так
А потом сделать что-то вроде этого
Затем вы можете обернуть это в Makefile.
источник
Если вы используете LaTeX, относительно не требующее высоких технологий решение состоит в том, чтобы ваш код выплевывал файл (или использовал сценарий для фильтрации выходных данных вашего кода), содержащий целую кучу строк, например:
\newcommand{\myresults1}{<value>}
Затем вы можете использовать
\input
команду, чтобы добавить этот файл в ваш документ, и использовать определенные команды для размещения значений.источник
Я работаю на Elsevier. Моя компания начала использовать платформу Collage (разработанную в ответ на выполнимый документ Grand Challenge) в журнальных выпусках, чтобы позволить авторам публиковать куски исполняемого кода со своей статьей. Эта функция позволяет читателям воспроизводить результаты, представленные в статье, и повторно использовать опубликованные материалы для своих собственных исследований. Collage поддерживает широкий спектр открытого и закрытого программного обеспечения; Более подробную информацию можно найти в информационном видео здесь и на веб-сайте Collage Authoring Environment .
источник