2012-02-09 86 views
8

当我将参数传递给#+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()的事情,和计算,也许是我的妄想。

回答

1

ORG-模式现在解释括号在头规格为elisp的这样你就可以做到这一点,在之间的一些的elisp:

命名ř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 

在源块标题

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

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

Works为我:)使用的elisp的

+0

真棒,由于用于示出。尽管如此,尽管我的'org-babel-load-languages'被设置为'((emacs-lisp.t)(sh.t)(plantuml.t)(R.t)(perl.t)) ',我从来没有能够得到'emacs-lisp'块的工作。 – 2012-11-09 17:06:33

+0

emacs-lisp块有什么错误? org-babel-load-languages看起来不错。你可能能够抛弃中间的elisp代码,你可以直接作为elisp代码直接找出你想要使用的R结果(默认高度)。 – 2012-11-10 00:58:45

2

我不知道如何使用组织模式来做到这一点,但这已经是knitr包(Sweave的替代品)中的一项功能,所以如果您不介意Sweave语法,则可以使用:

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

更多关于org-模式在knitrhttp://yihui.name/knitr/demo/org/