Hi all, Andreas Leha <andreas.l...@med.uni-goettingen.de> writes: > Hi Chuck, > > "Charles C. Berry" <ccbe...@ucsd.edu> writes: >> On Mon, 14 Dec 2015, Andreas Leha wrote: >> >>> Hi all, >>> >>> I'd like to hear your ideas on how to include noweb references to code >>> blocks in a way that the default values are used as parameter values. >>> >>> Here is a little example: >>> >>> #+PROPERTY: header-args:R :session *testR* >>> >>> The background is that I like to use Org mode table to record small data. >>> >>> #+name: datatable >>> | A | B | >>> |---+----| >>> | 1 | 10 | >>> | 2 | 20 | >>> >>> Usually I want to pre-process and/or convert such data. >>> >>> #+name: read_datatable >>> #+header: :var datatable=datatable >>> #+begin_src R :results none >>> datatable$B <- 10 * datatable$B >>> #+end_src >>> >>> Later I would like to use that data in larger (R-) code blocks. I'd >>> like such code blocks to DWIM: >>> >>> #+name: some_code >>> #+begin_src R :noweb yes :results graphics :file testplot.png >>> <<read_datatable>> >>> plot(datatable$A, datatable$B) >>> #+end_src >>> >>> But they do not: They are not stand alone and do not execute -- unless I >>> executed `read_datatable' manually/by chance upfront. >> >> Try this: >> >> #+name: read_datatable >> #+header: :var datatable=datatable >> >> #+begin_src R :results value :colnames yes >> datatable$B <- 10 * datatable$B >> datatable >> #+end_src >> >> #+name: some_code >> #+HEADER: :var datatable=read_datatable() >> >> #+begin_src R :noweb yes :results graphics :file testplot.png >> plot(datatable$A, datatable$B) >> #+end_src >> > > Thanks! I am aware of that possibility. Should have posted a more > involved example. This works if I only return a table. Or something > else, that can be passed through Org. But it fails for instance if the > result is a function (or more functions...). >
In case anyone is interested. I came up with a quite simple code block that does what I want: --8<---------------cut here---------------start------------->8--- #+name: org_exec #+header: :var srcblock="" #+begin_src emacs-lisp :results silent (save-excursion (org-babel-goto-named-src-block srcblock) (org-babel-execute-src-block) ) (concat srcblock " executed") #+end_src --8<---------------cut here---------------end--------------->8--- Now, I can do --8<---------------cut here---------------start------------->8--- #+name: some_code #+begin_src R :session *testR* :noweb yes :results graphics :file testplot.png <<org_exec("read_datatable")>> plot(datatable$A, datatable$B) #+end_src --8<---------------cut here---------------end--------------->8--- The remaining downside is that I have to take care of running things in the correct session. Best, Andreas PS: complete example: --8<---------------cut here---------------start------------->8--- * Org #+name: org_exec #+header: :var srcblock="" #+begin_src emacs-lisp :results silent (save-excursion (org-babel-goto-named-src-block srcblock) (org-babel-execute-src-block) ) (concat "\"" srcblock " executed" "\"") #+end_src * Data #+name: datatable | A | B | |---+----| | 1 | 10 | | 2 | 20 | #+name: read_datatable #+header: :var datatable=datatable #+begin_src R :session *testR* :results value :colnames yes datatable$B <- 10 * datatable$B datatable #+end_src #+results: read_datatable | A | B | |---+-----| | 1 | 100 | | 2 | 200 | * Analysis #+name: some_code #+begin_src R :session *testR* :noweb yes :results graphics :file testplot.png <<org_exec("read_datatable")>> plot(datatable$A, datatable$B) #+end_src #+results: some_code [[file:testplot.png]] --8<---------------cut here---------------end--------------->8---