Связывание/импорт внешнего исходного кода в организационном режиме

Этот статья вдохновил меня проверить Emac's org-mode немного, и в настоящее время я пытаюсь оценить, что больше подходит для написания моих документов: knitr/Sweave (в основном я использую R для программирования) или org-mode.

Что мне действительно нравится в Knitr, так это возможность экстернализовать фактический источник (осторожно: декларация меток/имен в R-скрипте, кажется, изменились с ## ---- label ------- на ## @knitr label; см. ?read_chunk) и «связать» их с реальным грамотным программированием/воспроизводимым исследовательским документом (в отличие от фактического написания кода в тот самый документ):

«Импорт» с

<<import-external, cache=FALSE>>=
read_chunk('foo-bar.R') # has label/name 'foo-bar'
@

и «повторное использование», ссылаясь на соответствующие ярлыки с помощью

<<foo-bar>>=
@

Вопрос

Это также возможно в организационном режиме, или я должен поместить фактический код в документ .org?

Я нашел это, но не нашел никакого конкретного понятия связывания/ импортировать файлы внешнего исходного кода и иметь возможность выполнять их, имея связанный код внутри

#+BEGIN_SRC R
<linked code>
#+END_SRC

Фон

Я вижу, что этот подход может до некоторой степени контрастировать с общей парадигмой грамотного программирования. Но мне нравится работать в несколько «атомарном» стиле, и поэтому мне кажется более естественным сначала хранить файлы отдельно, а затем динамически смешивать все вместе.


person Rappster    schedule 13.08.2013    source источник


Ответы (1)


Помогут ли именованные блоки кода?

 #+NAME: foo-bar
 #+BEGIN_SRC R
   source(foo-bar.R)
 #+END_SRC

А затем оцените (т.е. загрузите) код, когда он вам действительно понадобится:

 #+CALL: foo-bar()

Дополнительную информацию см. в руководстве.

person Alex Vorobiev    schedule 13.08.2013
comment
Про себя! Конечно, это должно работать! Большое спасибо! - person Rappster; 13.08.2013
comment
Просто чтобы убедиться: таким образом ожидается, что код в foo-bar.R будет function (в отличие от других типов свободных выражений), верно? Потому что кажется, что в #+CALL: вы на самом деле вызываете функцию. Или часть () — это просто способ организационного режима передачи/перезаписи произвольных элементов кода в именованные блоки кода? - person Rappster; 13.08.2013
comment
Имя в #+CALL: — это то, что вы использовали в #+NAME:, оно не имеет ничего общего с тем, что на самом деле находится в вашем R-коде (это может быть что угодно). Часть () — это способ передачи параметров в именованный блок кода, где вы могли бы определить параметры заголовка (например, :var n=2), затем вы можете сделать #+CALL: foo-bar(n=4) (см. этот раздел в руководстве по организационному режиму). - person Alex Vorobiev; 13.08.2013
comment
Круто, большое спасибо за разъяснение. Тогда я думаю, что должен отлично сделать! - person Rappster; 13.08.2013