Подтвердить что ты не робот

Использование 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

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

4b9b3361

Ответ 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 подробно рассмотрят.