From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dan Davison Subject: Re: [babel] R: New handling of file output Date: Tue, 21 Dec 2010 16:57:46 +0000 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Return-path: Received: from [140.186.70.92] (port=42639 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PV5XF-0004uC-U2 for emacs-orgmode@gnu.org; Tue, 21 Dec 2010 11:58:03 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1PV5XE-0003nW-NX for emacs-orgmode@gnu.org; Tue, 21 Dec 2010 11:58:01 -0500 Received: from lo.gmane.org ([80.91.229.12]:57601) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1PV5XE-0003nF-CW for emacs-orgmode@gnu.org; Tue, 21 Dec 2010 11:58:00 -0500 Received: from list by lo.gmane.org with local (Exim 4.69) (envelope-from ) id 1PV5XC-0006u1-Ul for emacs-orgmode@gnu.org; Tue, 21 Dec 2010 17:57:58 +0100 Received: from 94.196.196.169.threembb.co.uk ([94.196.196.169]) by main.gmane.org with esmtp (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Tue, 21 Dec 2010 17:57:58 +0100 Received: from dandavison7 by 94.196.196.169.threembb.co.uk with local (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Tue, 21 Dec 2010 17:57:58 +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 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