emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: Dan Davison <davison@stats.ox.ac.uk>
To: emacs-orgmode <emacs-orgmode@gnu.org>
Subject: Re: org-babel-R export parameters
Date: Mon, 07 Jun 2010 10:03:46 +0100	[thread overview]
Message-ID: <871vcjp631.fsf@stats.ox.ac.uk> (raw)
In-Reply-To: <20100607080434.GD13859@thinkpad.adamsinfoserv.com> (Russell Adams's message of "Mon, 7 Jun 2010 03:04:34 -0500")

Russell Adams <RLAdams@AdamsInfoServ.Com> writes:

> On Mon, Jun 07, 2010 at 12:27:46AM +0100, Dan Davison wrote:
>> Russell Adams <RLAdams@AdamsInfoServ.Com> writes:
>> 
>> > I needed the ability to view what parameters were sent to plot in
>> > R. Turns out that you can't query some things like the active filename
>> > in R, so I went back to org.
>
> Really, you can't query the filename of the active device in R. I
> exported all the parameters to the R code block to R variables so I
> can use them in R.
>
>> > This patch takes each parameter and converts it to a variable in R,
>> > including the filename (org_babel_filename).
>> >
>> > My intent is to parse the filename in R to create a dev.copy() to a
>> > pdf while creating a PNG. Ideally then I can see the png inline, and
>> > export to latex with the PDF.
>
> See example.
>
>> 
>> Hi Russell,
>> 
>> I haven't completely understood paras 1 and 3 above. Would you mind
>> posting an example that illustrates the problem that this patch solves?
>> 
>> Dan
>> 
>
> Here's a non-functional example that I hope can illustrate the point:
>
> ----------------------------------------------------------------------
> * HEading
>
>   blah blah blah blah blah blah blah blah blah blah blah blah blah
>
>
> #+BEGIN_SRC R :file whatever.png :width 300 :height 200 :exports none
>
> a = c(1,2,3,4)
> plot(a)
>
> dev.copy(pdf,gsub(".png",".pdf",org_babel_filename))
> #+END_SRC
>
> #+results:
> [[file:whatever.png]]
>
> #+LATEX \\include[whatever.pdf]
>
> ----------------------------------------------------------------------
>
> The idea is I want to be able to see the inline PNG image of my graph
> while writing, and when I export I'll point the latex exporter to the
> PDF. 

Hi Russell,

Thanks, that's clear. You may well be right that it would be appropriate
to expose further information about the babel source block
(e.g. the :file argument) to the external language. However, one general
design consideration is that where possible we do want to avoid
implementing ad-hoc language-specific behaviour. If we do go your route
I would suggest that everything should be wrapped up in a single list
object (hash in perl, dict in python, etc etc), and that that list/hash
object should have a reasonably consistent name across languages
(__org_babel_header_args__ or something).

For now however, I would suggest taking the view that what you are doing
is slightly non-standard org-babel usage, and therefore that it should
be achieved more explicitly. E.g. how about the following approach?

#+begin_src R :results file :var basename="myplot"
  a <- 1:4
  pngfile <- sprintf("%s.png", basename)
  pdffile <- sprintf("%s.pdf", basename)
  
  png(pngfile)
  plot(a)
  dev.off()
  
  pdf(pdffile)
  plot(a)
  dev.off()
  
  pngfile
#+end_src

It should be possible to avoid repetitive code by abstracting that
functionality. One possibility would be an R function
plot.png.and.pdf.returning.png.filename(); alternatively, I suspect
analogous abstraction could be achieved in org-babel using noweb block
references or a library of babel function.

Dan

> This provides a vector format for Latex, instead of a low
> resolution bitmap. Yes you can use PDF's as includes, and they look
> great because they are a vector format.
>
> Does that help?
>
> I'm having issues with the R dev.copy, but that's a separate issue.
>
> Thanks.
>
> ------------------------------------------------------------------
> Russell Adams                            RLAdams@AdamsInfoServ.com
>
> PGP Key ID:     0x1160DCB3           http://www.adamsinfoserv.com/
>
> Fingerprint:    1723 D8CA 4280 1EC9 557F  66E8 1154 E018 1160 DCB3
>
> _______________________________________________
> Emacs-orgmode mailing list
> Please use `Reply All' to send replies to the list.
> Emacs-orgmode@gnu.org
> http://lists.gnu.org/mailman/listinfo/emacs-orgmode

  reply	other threads:[~2010-06-07  9:04 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-06-06 22:58 org-babel-R export parameters Russell Adams
2010-06-06 23:27 ` Dan Davison
2010-06-07  8:04   ` Russell Adams
2010-06-07  9:03     ` Dan Davison [this message]
2010-06-07 10:31       ` Russell Adams
2010-06-07 18:40         ` Erik Iverson
2010-06-07 18:51           ` Russell Adams
2010-06-07 19:44             ` Eric Schulte
2010-06-07 19:56               ` Erik Iverson
2010-06-07 22:28                 ` Eric Schulte
2010-06-07 20:21               ` Russell Adams
2010-06-07 13:36     ` Erik Iverson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.orgmode.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=871vcjp631.fsf@stats.ox.ac.uk \
    --to=davison@stats.ox.ac.uk \
    --cc=emacs-orgmode@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).