2012-02-09 42 views
8

Khi tôi chuyển đối số cho khối #+begin_src, có cách nào để tính toán động không?Giá trị đối số máy tính động

Cụ thể, tôi muốn thiết lập các thuộc tính :height một cái gì đó mà phụ thuộc vào một số biến trong mã R của tôi, giống như trong mockup sau:

#+begin_src R 
x <- 5 
#+end_src 

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

nơi mà getvar() điều, và tính toán hợp thì có lẽ tôi suy nghĩ viển vông.

Trả lời

1

org chế độ hiện nay giải thích dấu ngoặc trong các thông số kỹ thuật tiêu đề như elisp để bạn có thể làm điều này với một số elisp ở giữa:

khối src R Named

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

#+results: default-height 
: 300 

Hãy kết quả từ R một biến emacs

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

Sử dụng elisp trong khối tiêu đề nguồn

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

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

trình cho tôi :)

+0

Awesome, nhờ cho thấy rằng . Tuy nhiên, vì một số lý do, mặc dù 'org-babel-load-languages' được đặt thành' ((emacs-lisp. T) (sh. T) (plantuml. T) (R. T) (perl. T)) ', Tôi chưa bao giờ có thể nhận được các khối' emacs-lisp' làm việc. –

+0

Lỗi với khối emacs-lisp là gì? org-babel-load-languages ​​trông ok. Bạn có thể có thể bỏ qua đoạn mã ở giữa là bạn có thể tìm hiểu cách tham chiếu kết quả R bạn muốn sử dụng (chiều cao mặc định trong ví dụ trên) trực tiếp như mã elisp. –

2

Tôi không biết cách sử dụng chế độ org để làm điều đó, nhưng đây là một tính năng trong gói knitr (thay thế cho Sweave), vì vậy nếu bạn không nhớ cú pháp Sweave, bạn có thể sử dụng:

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

Thông tin thêm về org-mode trong knitr: http://yihui.name/knitr/demo/org/

Các vấn đề liên quan