Использование org-mode для структурирования анализа
Я пытаюсь лучше использовать 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 и expl-by-a-factor-1. Я хочу их в файле org, потому что они имеют отношение к проекту. В конце концов, завтра кто-то может захотеть узнать, почему я был так уверен, что исследование по-фактору-1 было бесполезным. Я хочу сохранить этот код, так что я могу удалять сюжет, анализ или что-то еще и продолжать, но не запускать его каждый раз. Я повторяю все, потому что нет никаких оснований для его запуска. То же самое с чистым-csv материалом. Я хочу, чтобы он документировал, что я сделал с данными (и почему), но я не хочу повторно запускать их каждый раз. Я просто импортирую foo-clean.csv.
Я разобрался во всем этом и прочитал кучу архивов списков рассылки org-mode, и мне удалось найти пару идей, но не то, что я хочу. EXPORT_SELECT_TAGS, EXPORT_EXCLUDE_TAGS великолепны при экспорте файла. И заголовок: plugle хорошо работает при создании фактических исходных файлов. Я не хочу делать ни того, ни другого. Я просто хочу выполнить буфер. Я хотел бы иметь возможность определять кодовые блоки таким же образом, чтобы они выполнялись или игнорировались. Я думаю, я хотел бы найти способ иметь такую переменную org, как:
EXECUTE_SELECT_TAGS
Таким образом, я мог бы просто пометить мои различные блоки кода и сделать это. Было бы еще лучше, если бы я мог запустить файл, используя только исходные блоки с определенными тегами. Я не могу найти способ сделать это, и я думал, что попрошу, прежде чем спросить/попросить новую функцию в орг-режиме.
Ответы
Ответ 1
Я понял. Из руководства по организации:
Аргумент заголовка eval может использоваться для ограничения оценки конкретных блоков кода.: eval принимает два аргумента "никогда" и "запрос".: eval никогда не гарантирует, что кодовый блок никогда не будет оцениваться, это может быть полезно для защиты от оценки опасных блоков кода.: для запроса eval потребуется запрос для каждого выполнения блока кода независимо от значения переменной org-confirm-babel-оценки.
Итак, вам просто нужно добавить
: eval never
в заголовок блоков, которые вы не хотите исполнять, и voilá!
Ответ 2
В то время как я никогда не получал ответа на мой вопрос, обсуждение было интересным, и, по-видимому, основанный на режиме org шаблон Template for R поражает нескольких людей как интересную идею. Я загрузил исходный код в org-mode и посмотрел на org-babel-execute-buffer. Это, как я боялся, наивная функция, которая делает именно то, что она говорит, и ничего больше. В настоящее время невозможно (в настоящее время) передать ему какие-либо дополнительные параметры, чтобы повлиять на его поведение. (Если я плохо неправильно читаю lisp, что вполне возможно.)
В конце концов, я решил, что org-babel-execute-buffer не нужен для полезной системы шаблонов R. Функциональность Babel noweb очень гибкая, и я думаю, что можно построить работоспособное решение, используя noweb, вместо того, чтобы пытаться разработать сложную схему тегов, чтобы определить, как и когда запускать.
Для запутывания/экспорта все равно можно использовать теги для создания полезного/нормального вывода.
Для всех, кто заинтересован: LiterateR
Возможно, немного грубо использовать этот поток, чтобы поместить это, но именно поэтому я задал этот вопрос в первую очередь. TemplateR - моя попытка сделать R немного проще в использовании. Сейчас это всего лишь шаблон с двумя упрощенными функциями. Я считаю это доказательством концепции на данный момент. В конце концов, я хочу развить то, что делает больше, чтобы помочь людям быстрее развивать проекты R. TemplateR выполнит это:
1. Обеспечьте прочную структуру для развития.
2. Обеспечьте встроенную функцию для поддержки общих задач, особенно в области воспроизводимых исследований.
3. Предоставьте фрагменты проверенного кода, которые могут быть быстро переназначены для текущего проекта.
В настоящее время все, что он предоставляет, - это базовая структура/структура и две простые функции.
1. Определите, какие пакеты R отсутствуют (в зависимости от того, что вручную вводится в таблицу) и
2. Создает каталоги проектов (графики, данные, отчеты).
В будущих версиях появится больше. README.org и TODO.org подробно рассмотрят.