Вычисление значений аргумента динамически - PullRequest
8 голосов
/ 09 февраля 2012

Когда я передаю аргументы в блок #+begin_src, есть ли способ их динамического вычисления?

В частности, я хочу установить атрибут :height для чего-то, что зависит от некоторых переменных вмой код R, как в следующем макете:

#+begin_src R
x <- 5
#+end_src

#+begin_src R :results graphics :file foo.svg :height (3*getvar('x'))
...draw picture here
#+end_src

, где эта вещь getvar() и вычисления с ней, возможно, являются моими желаемыми мыслями.

Ответы [ 2 ]

2 голосов
/ 10 февраля 2012

Я не знаю, как использовать для этого org-mode, но это уже функция в пакете knitr (альтернатива Sweave), поэтому, если вы не против синтаксиса Sweave, вы можете использовать:

<<>>=
x <- 5
<<foo, dev='svg', fig.height=3*x>>=
# draw plots here
@

Подробнее об орг-режиме в knitr: http://yihui.name/knitr/demo/org/

1 голос
/ 09 ноября 2012

Режим Org теперь интерпретирует скобки в спецификациях заголовка как elisp, так что вы можете сделать это с некоторым elisp между ними:

Именованный блок R src

 #+name: default-height
 #+begin_src R
   x <- 300
 #+end_src

 #+results: default-height
 : 300

Сделать результат из переменной R emacs

#+begin_src emacs-lisp :var incoming = default-height :results silent
  (setq dh incoming)
#+end_src

Использование elisp в заголовке исходного блока

#+begin_src R :results graphics :file test.png :height (* dh 3)
  plot(rnorm(100))
#+end_src

#+results:
[[file:test.png]]

У меня работает :) 1012 *

...