Использование org-mode для структурирования анализа - PullRequest
24 голосов
/ 29 ноября 2010

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

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

* 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, каким-то образом знать, чтобы пропустить блоки кода import-sql, clean-csv иисследовать, по-а-фактора-1.Я хочу, чтобы они были в файле org, потому что они имеют отношение к проекту.В конце концов, завтра кто-то может захотеть узнать, почему я так уверен, что исследование по фактору 1 бесполезно.Я хочу сохранить этот код, чтобы я мог показывать сюжет, анализ или что-то еще и продолжать, но не запускать его каждый раз, когда я перезапускаю все, потому что нет причин его запускать.То же самое с чистым CSV.Я хочу, чтобы все было задокументировано, что я сделал с данными (и почему), но я не хочу перезапускать это каждый раз.Я просто импортирую foo-clean.csv.

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

EXECUTE_SELECT_TAGS

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

Ответы [ 2 ]

8 голосов
/ 03 февраля 2011

Я разобрался.Из руководства org:

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

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

: eval never

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

1 голос
/ 02 декабря 2010

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

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

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

Для всех, кому это интересно: LiterateR

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

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

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

...