Andreas Leha writes: > Hi Rainer, > > Rainer M Krug writes: >> Hi >> >> Is it possible to tangle an R code block including the code which is >> generating the graphs when using =:results graphics= ? >> >> I would like to tangle these code blocks generating the graphs as I >> would like to have a script which I can use to easily update all graphs >> when the simulated input data is updated. I have this for the actual >> analysis which works perfectly, but would like to have the same for the >> graphs. At the same time, I like the clarity of specifying :width and >> :height and other parameter for the plotting as header arguments. >> >> I have >> >> ,---- >> | :PROPERTIES: >> | :header-args+: :prologue "env <- fitBFGS; attach(env)" >> | :header-args+: :epilogue "detach(env); rm(env)" >> | :END: >> `---- >> >> and this is tangled perfectly - but obviously not the code for >> plotting. Is there an argument / setting to enable this? >> >> Thanks, >> >> Rainer > > That is a very relevant question and I'd be interested in the answer as > well. But I am not aware of any support by Org mode for this. > > I guess calling `org-babel-expand-src-block' prior to tangling would > answer your needs? I don't think so - as this is doing the same as C-c. The graphics code is only added in the call of org-babel-execute:R so some refactoring would be necessary. In org-babel-execute:R there is the following code: #+begin_src emacs-lisp (full-body (let ((inside (list (org-babel-expand-body:R body params graphics-file)))) (mapconcat 'identity (if graphics-file (append (list (org-babel-R-construct-graphics-device-call graphics-file params)) inside (list "},error=function(e){plot(x=-1:1, y=-1:1, type='n', xlab='', ylab='', axes=FALSE); text(x=0, y=0, labels=e$message, col='red'); paste('ERROR', e$message, sep=' : ')}); dev.off()")) inside) "\n"))) #+end_src If this expansion is moved into org-babel-expand-body:R, it should work and *always* expand the graphics code (as org-babel-expand-body:R adds the :epilogue and :prologue). Then one would just need a new header argument and it should work. > > This would be desirable not only for plotting code blocks, also data > passed to code block is 'lost' during tangling. Yes - debugging the whole process of evaluation would also be much easier. > > I think it would be good to have a source block header argument, say > `:tangleexpanded', controlling such functionality. > > WDYT? Yes - that would be an ideal solution. But expanded is already used in a different context (noweb), so something like :tangleaseval would make sense, making clear that the code is tangled as it would be evaluated. Unfortunately, I have no time for looking into this at the moment. But it should be possible without to much hassle. Thanks, Rainer > > Regards, > Andreas > > -- Rainer M. Krug, PhD (Conservation Ecology, SUN), MSc (Conservation Biology, UCT), Dipl. Phys. (Germany) Centre of Excellence for Invasion Biology Stellenbosch University South Africa Tel : +33 - (0)9 53 10 27 44 Cell: +33 - (0)6 85 62 59 98 Fax : +33 - (0)9 58 10 27 44 Fax (D): +49 - (0)3 21 21 25 22 44 email: Rainer@krugs.de Skype: RMkrug PGP: 0x0F52F982