2012-02-09 84 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/