Использование org-mode для структурирования анализа

StackOverflow https://stackoverflow.com/questions/4305497

  •  29-09-2019
  •  | 
  •  

Вопрос

Я пытаюсь лучше использовать org-mode для своих проектов.Я думаю, что грамотное программирование особенно применимо к сфере анализа данных, а org-mode позволяет нам выполнять довольно крутое грамотное программирование.

Я думаю, большинство из вас согласятся со мной в том, что рабочий процесс написания анализа отличается от большинства других типов программирования.Я не просто пишу программу, я исследую данные.И, хотя многие из этих исследований являются тупиковыми, я не хочу полностью удалять / игнорировать их.Я просто не хочу перезапускать их каждый раз, когда я запускаю файл org.Я также склонен находить или разрабатывать фрагменты полезного кода, которые я хотел бы поместить в аналитический шаблон, но некоторые из этих фрагментов будут уместны не для каждого проекта, и я хотел бы знать, как заставить org-mode игнорировать эти фрагменты при выполнении всего буфера.Вот упрощенный пример.

* Import
  - I want org-mode to ignore import-sql.
#+srcname: import-data
#+begin_src R :exports none :noweb yes
<<import-csv>>
#+end_src

#+srcname: import-csv
#+begin_src R :exports none
data <- read.csv("foo-clean.csv")
#+end_src

#+srcname: import-sql
#+begin_src R :exports none
library(RSQLite)
blah blah blah
#+end_src

* Clean
  - This is run on foo.csv, producing foo-clean.csv
  - Fixes the mess of -9 and -13 to NA for my sanity.
  - This only needs to be run once, and after that, reference.
  - How can I tell org-mode to skip this?
#+srcname: clean-csv
#+begin_src sh :exports none
sed .....
#+end_src

* Explore

** Explore by a factor (1)
   - Dead end. Did not pan out. Ignore.
   - Produces a couple of charts showing there is not interaction.
#+srcname: explore-by-a-factor-1
#+begin_src R :exports none :noweb yes
#+end_src

** Explore by a factor (2)
   - A useful exploration that I will reference later in a report.
   - Produces a couple of charts showing the interaction of my variables.
#+srcname: explore-by-a-factor-2
#+begin_src R :exports none :noweb yes
#+end_src

Я хотел бы иметь возможность использовать org-babel-execute-buffer и каким-то образом знать, что org-mode пропускает блоки кода import-sql, clean-csv и explore-by-a-factor-1.Я хочу, чтобы они были в файле org, потому что они имеют отношение к проекту.В конце концов, завтра кто-нибудь, возможно, захочет узнать, почему я был так уверен, что исследование с коэффициентом 1 бесполезно.Я хочу сохранить этот код, чтобы я мог создать график, или анализ, или что угодно еще и продолжать, но не запускать его каждый раз, когда я все перезапускаю, потому что нет причин запускать его.То же самое с чистыми csv-файлами.Я хочу, чтобы он был рядом, чтобы документировать, что я сделал с данными (и почему), но я не хочу перезапускать его каждый раз.Я просто импортирую foo-clean.csv.

Я погуглил все это и прочитал кучу архивов списков рассылки в режиме организации, и мне удалось найти пару идей, но не то, что я хочу.Теги EXPORT_SELECT_TAGS, EXPORT_EXCLUDE_TAGS отлично подходят при экспорте файла.И заголовок :tangle хорошо работает при создании реальных исходных файлов.Я не хочу делать ни того, ни другого.Я просто хочу выполнить буфер.Я хотел бы иметь возможность аналогичным образом определять блоки кода для выполнения или игнорирования.Я думаю, я хотел бы найти способ иметь переменную org, такую как:

EXECUTE_SELECT_TAGS_ИСПОЛНЯЕМЫЕ ТЕГИ

Таким образом, я мог бы просто пометить свои различные блоки кода тегами и покончить с этим.Было бы еще лучше, если бы я мог затем запустить файл, используя только исходные блоки с определенными тегами.Я не могу найти способ сделать это, и я подумал, что спрошу, прежде чем просить / умолять о новой функции в org-mode.

Это было полезно?

Решение

Я догадался.Из руководства организации:

Аргумент заголовка :eval может использоваться для ограничения вычисления определенных блоков кода.:eval принимает два аргумента “никогда” и “запрос”.:eval никогда не гарантирует, что блок кода никогда не будет оценен, это может быть полезно для защиты от оценки опасных блоков кода.:запрос eval потребует запроса для каждого выполнения блока кода независимо от значения переменной org-confirm-babel-evaluate.

Так что вам просто нужно добавить

:оценка никогда

перейдите к заголовку блоков, которые вы не хотите выполнять, и вуаля!

Другие советы

Хотя я так и не получил ответа на свой вопрос, обсуждение было интересным, и, по-видимому, шаблон на основе org-mode для R показался нескольким людям интересной идеей.Я загрузил исходный код в org-mode и посмотрел на org-babel-execute-buffer.Это, как я и опасался, наивная функция, которая делает именно то, что, по ее словам, она делает, и ничего больше.В настоящее время невозможно передать ему какие-либо дополнительные параметры, которые повлияли бы на его поведение.(Если только я не сильно искажаю лисп, что вполне возможно.)

В конце концов, я решил, что org-babel-execute-buffer не нужен для полезной системы шаблонов R.Функциональность noweb от Babel действительно гибкая, и я думаю, что с помощью noweb можно создать работоспособное решение, вместо того чтобы пытаться разработать сложную схему тегов для определения того, как и когда запускать что-либо.

Для запутывания / экспорта все равно должна быть возможность использовать теги для создания пригодных к использованию / вменяемых выходных данных.

Для всех, кто заинтересован: ЛитератоР

Вероятно, немного грубо использовать эту тему, чтобы опубликовать это там, но именно поэтому я задал этот вопрос в первую очередь.TemplateR - это моя попытка сделать R немного проще в использовании.Прямо сейчас это так просто шаблон с двумя упрощенными функциями.На данный момент я считаю это доказательством концепции.В конце концов, я хочу разработать что-то, что поможет людям быстрее разрабатывать R-проекты.TemplateR выполнит это с помощью:1.Обеспечьте прочную структуру, вокруг которой можно развиваться.2.Предоставьте встроенную функцию для обеспечения поддержки общих задач, особенно в области воспроизводимых исследований.3.Предоставьте фрагменты протестированного кода, которые могут быть быстро переделаны для текущего проекта.

Прямо сейчас все, что он предоставляет, - это базовая структура / фреймворк и две простые функции.1.Определите, какие пакеты R отсутствуют (на основе того, что вручную введено в таблицу) и 2.Создает каталоги проектов (графики, данные, отчеты).

В будущих версиях появится больше информации.В README.org и TODO.org рассматриваются более подробно.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top