[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [O] Tangle including code generating graphics for :results graphics

From: Rainer M Krug
Subject: Re: [O] Tangle including code generating graphics for :results graphics
Date: Thu, 24 Sep 2015 11:03:15 +0200

Andreas Leha <address@hidden> writes:

> Hi Rainer,
> Rainer M Krug <address@hidden> 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
>> ,----
>> | :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 
            (let ((inside
                   (list (org-babel-expand-body:R body params graphics-file))))
              (mapconcat 'identity
                         (if graphics-file
                              (list (org-babel-R-construct-graphics-device-call
                                     graphics-file params))
                              (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()"))

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.

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.



> 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:      address@hidden

Skype:      RMkrug

PGP: 0x0F52F982

Attachment: signature.asc
Description: PGP signature

reply via email to

[Prev in Thread] Current Thread [Next in Thread]