From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dan Davison Subject: Re: [babel] R: New handling of file output Date: Thu, 06 Jan 2011 17:14:14 +0000 Message-ID: References: <30A86C75-D89E-45F4-A482-C81218CECAD9@tsdye.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Return-path: Received: from [140.186.70.92] (port=58102 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PatPy-000468-DY for emacs-orgmode@gnu.org; Thu, 06 Jan 2011 12:14:31 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1PatPx-0004TF-1N for emacs-orgmode@gnu.org; Thu, 06 Jan 2011 12:14:30 -0500 Received: from lo.gmane.org ([80.91.229.12]:55453) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1PatPw-0004T9-L5 for emacs-orgmode@gnu.org; Thu, 06 Jan 2011 12:14:28 -0500 Received: from list by lo.gmane.org with local (Exim 4.69) (envelope-from ) id 1PatPv-0004Z8-UV for emacs-orgmode@gnu.org; Thu, 06 Jan 2011 18:14:27 +0100 Received: from 94.196.193.8.threembb.co.uk ([94.196.193.8]) by main.gmane.org with esmtp (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Thu, 06 Jan 2011 18:14:27 +0100 Received: from dandavison7 by 94.196.193.8.threembb.co.uk with local (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Thu, 06 Jan 2011 18:14:27 +0100 List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: emacs-orgmode@gnu.org "Thomas S. Dye" writes: > Aloha all, > > Here is an example of the new handling of file output with an R source > code block that doesn't use "base" graphics: > > #+srcname: r-edge-angle-histogram > #+begin_src R :results output graphics :var x=whole-adzes :file r/ > adze_edge_angle.png :width 400 :height 300 > library(ggplot2) > adze.edge.angle <- ggplot(x, aes(edge_angle)) > adze.edge.angle + geom_histogram(aes(y=..density..)) + > geom_density(weight=2) + xlab("Measured cutting edge angle > (degrees)") > #+end_src I was initially a bit baffled by this example. If anyone else is curious as to why, when graphics are generated by ggplot2, :results output is required in addition to :results graphics, please see Erik Iverson's original post on producing grid-based (e.g. lattice, ggplot2) R graphics with org-babel (bearing in mind of course that the header arg syntax has changed as per this thread). http://article.gmane.org/gmane.emacs.orgmode/26082 Dan > > #+results: > [[file:r/adze_edge_angle.png]] > > Previously, the source line was: > #+begin_src R :results output :var x=whole-adzes :file r/ > adze_edge_angle.png :width 400 :height 300 > > The only change was to append graphics to :results output. > > All the best, > Tom > > On Dec 21, 2010, at 6:57 AM, Dan Davison wrote: > >> Dan Davison writes: >> >>> Please note the following changes to the way that org-babel handles >>> file output. These may break existing org-babel files which use >>> the :file header argument. >>> >>> :file should be understood as saying "write the result >>> to and return a link to ". >>> >>> This works for all languages. For graphics languages (e.g. ditaa, >>> dot, >>> gnuplot) there is no change in behavior: "result" in the above is the >>> graphics, and a link to the image is placed in the org buffer. For >>> general-purpose languages (e.g. emacs-lisp, python, R, ruby, shell), >>> the "result" written to file is the normal org-babel result (string, >>> number, table). >>> >>> This is a backwards-incompatible change for R, which was previously >>> interpreting :file to mean "send graphics to file". I will send a >>> separate email concerning R. >> >> Previously R understood :file to mean "save graphics to >> "[1]; now R behaves like other languages and sends the >> normal >> org-babel result to file (string, number, table). To tell R to save >> graphics[1] to file, use :results graphics. >> >> Some examples: >> >> Wrong! >> >> #+begin_src R :file img.png >> hist(rnorm(100)) >> "img.png is going to contain this string." >> #+end_src >> >> Use :results graphics save graphics: >> >> #+begin_src R :file img.png :results graphics >> hist(rnorm(100)) >> "But now img.png is going to contain graphics." >> #+end_src >> >> You may want to use `org-babel-default-header-args:R' to make this >> more convenient: >> >> #+begin_src emacs-lisp >> (setq org-babel-default-header-args:R >> '((:results . "graphics"))) >> #+end_src >> >> Alternatively the :results graphics header can be set in a property >> drawer for the subtree, or a #+babel: line, as usual. >> >> Now this will do what was intended >> #+begin_src R :file img.png >> hist(rnorm(100)) >> #+end_src >> >> Here is an example of saving something other than base graphics to >> file, >> and returning a link to the file. Note that :file is not used, and the >> filename must be returned. This could be used to save images created >> by >> non-base graphics libraries: >> >> #+begin_src R :results file :var file="savefile" >> write.something.to.file <- function(f) cat("hello", file=f) >> write.something.to.file(f=file) >> file >> #+end_src >> >> >> Dan >> >> >> * Footnotes >> [1] This only works for "base" graphics. >> >> >> >>> >>> In order to return a file link from a src block without telling babel >>> to save any results to that file, use :results and do not >>> use :file. The code block can of course write arbitrary content to >>> . >>> >>> Some examples: >>> >>> Save the output of ls -l as a .csv file (recall that :results value >>> is >>> the default): >>> >>> #+begin_src sh :file dirlisting.csv :sep , >>> ls -l >>> #+end_src >>> >>> Send the text output of ls -l directly to file: >>> >>> #+begin_src sh :results output :file dirlisting.txt >>> ls -l >>> #+end_src >>> >>> Dan >>> >>> >>> _______________________________________________ >>> 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 >> >> >> _______________________________________________ >> 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 > > > _______________________________________________ > 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