From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Eric Schulte" Subject: Re: Re: problem with babel and R Date: Thu, 26 Aug 2010 10:10:24 -0600 Message-ID: <87k4ndjqxb.fsf@gmail.com> References: <87tymtnxzi.fsf@gmail.com> <1668ca$1pq4c@mail.curie.net> <87d3tflgc3.fsf@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Return-path: Received: from [140.186.70.92] (port=54314 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Oof2B-0007EO-Cl for emacs-orgmode@gnu.org; Thu, 26 Aug 2010 12:10:40 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1Oof24-0002kt-O9 for emacs-orgmode@gnu.org; Thu, 26 Aug 2010 12:10:34 -0400 Received: from mail-iw0-f169.google.com ([209.85.214.169]:38844) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1Oof24-0002kn-EQ for emacs-orgmode@gnu.org; Thu, 26 Aug 2010 12:10:28 -0400 Received: by iwn33 with SMTP id 33so2516106iwn.0 for ; Thu, 26 Aug 2010 09:10:27 -0700 (PDT) In-Reply-To: <87d3tflgc3.fsf@gmail.com> (Eric Schulte's message of "Wed, 18 Aug 2010 16:13:32 -0600") 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: David Hajage Cc: emacs-orgmode@gnu.org Hi, A fix to this issue has been pushed up to the repository. As can now be read in the documentation of the `org-babel-insert-result' function [1], there is now a subtle distinction between ":results org" and ":results raw", where ":results org" will wrap code block results in a "begin_src org" block. The block wrapper makes it possible for the entirety of the results to be located and removed by Babel upon code block re-evaluation. In addition a new ob-org.el file has been added providing support for evaluation of Org-mode blocks. With this new language support loaded the above technique becomes a working replacement for ":results raw" allowing the body of the org code block to be interpreted as inline org-mode text on export. This is done through some non-standard default header arguments described in the recent commit message (see [2]) Best -- Eric "Eric Schulte" writes: > Hi David, > > "#+end_results: foo" (or some derivative syntax) sounds like a good > idea, I'll add it to the Babel task list. > > Thanks -- Eric > > David Hajage writes: > >> OK, I understand that using ":results org", the results is not altered, >> there is no post processing. But I don't want a post processing, I would >> like a way to tell babel where is the begining *and the end* of the outp= ut >> produces by a particular R source block. I think an "#+end_results: foo"= at >> the end of the output could do the job. Then, the option "replace" could >> work in all situation, even if a blank line is inserted somewhere in the= org >> output. No? >> David >> >> >> On Tue, Aug 17, 2010 at 17:15, Eric Schulte wro= te: >> >>> Hi David, >>> >>> David Hajage writes: >>> >>> > Thank you very much for your answer. >>> > >>> >>> My pleasure >>> >>> > >>> > But when I run the following code directly into R, no extra lines is >>> >added >>> > by the ascii function: >>> >> library(ascii) >>> > Le chargement a n=C3=A9cessit=C3=A9 le package : proto >>> >> options(asciiType =3D "org") >>> >> ascii(head(esoph)) # no extra line >>> > | | agegp | alcgp | tobgp | ncases | ncontrols | >>> > |---+-------+-----------+----------+--------+-----------| >>> > | 1 | 25-34 | 0-39g/day | 0-9g/day | 0.00 | 40.00 | >>> > | 2 | 25-34 | 0-39g/day | 10-19 | 0.00 | 10.00 | >>> > | 3 | 25-34 | 0-39g/day | 20-29 | 0.00 | 6.00 | >>> > | 4 | 25-34 | 0-39g/day | 30+ | 0.00 | 5.00 | >>> > | 5 | 25-34 | 40-79 | 0-9g/day | 0.00 | 27.00 | >>> > | 6 | 25-34 | 40-79 | 10-19 | 0.00 | 7.00 | >>> > >>> >>> ah, my fault, this isn't an ascii issue. >>> >>> > >>> > In fact, the solution was to run 'library(ascii)' in another source >>> block. >>> > When I run only this: >>> > >>> >>> Thanks for pointing this out, I see what's happening now. >>> >>> The :results output header argument (see [1] for information on header >>> arguments) informs Org-mode to collect all of the output of the source >>> code block. This means that when library(ascii) is run, an empty line >>> is collected and appended to the output. Removing the "output" header >>> argument should fix this issue. >>> >>> My I ask why you are using the ascii package for simple table output? >>> It seems to me that this would be much simpler using the pure Org-mode >>> solution I suggested in my previous email. >>> >>> > >>> > #+begin_src R :session *R* :results output org replace >>> > ascii(head(esoph)) >>> > #+end_src >>> > >>> > #+results: foo >>> > | | agegp | alcgp | tobgp | ncases | ncontrols | >>> > |---+-------+-----------+----------+--------+-----------| >>> > | 1 | 25-34 | 0-39g/day | 0-9g/day | 0.00 | 40.00 | >>> > | 2 | 25-34 | 0-39g/day | 10-19 | 0.00 | 10.00 | >>> > | 3 | 25-34 | 0-39g/day | 20-29 | 0.00 | 6.00 | >>> > | 4 | 25-34 | 0-39g/day | 30+ | 0.00 | 5.00 | >>> > | 5 | 25-34 | 40-79 | 0-9g/day | 0.00 | 27.00 | >>> > | 6 | 25-34 | 40-79 | 10-19 | 0.00 | 7.00 | >>> > >>> > Everything is then OK. >>> > I have no idea why "library(ascii)..." generates an extra empty line = in >>> the >>> > results. >>> > >>> > If I understand, the results is all the text directly under "#+result= s:", >>> > until the first empty line. But what happens if the result contains e= mpty >>> > lines? Here an example with ascii and Hmisc package: >>> > >>> >>> This is not quite right, see [2] for a discussion of results handling. >>> The "org" option to results is a special case in which no >>> post-processing of the results takes place, and the raw output is >>> inserted into the org-mode buffer. >>> >>> Under normal usage w/o this header argument, results are either tabular >>> or are textual. If tabular a single table can easily be recognized and >>> handled, if textual they are normally enclosed in a block (example, >>> html, latex, etc...), the block then allows for empty lines while still >>> making it clear where the results end. >>> >> >> >>> >>> > >>> >> library(ascii) >>> >> library(Hmisc) >>> >> ascii(describe(esoph[, 1:3])) >>> > #+CAPTION: esoph[, 1:3] >>> > - 3 Variable >>> > - 88 Observations >>> > >>> > *agegp* >>> > | n | missing | unique | >>> > | 88 | 0 | 6 | >>> > >>> > | | 25-34 | 35-44 | 45-54 | 55-64 | 65-74 | 75+ | >>> > | Frequency | 15 | 15 | 16 | 16 | 15 | 11 | >>> > | % | 17 | 17 | 18 | 18 | 17 | 12 | >>> > >>> > *alcgp* >>> > | n | missing | unique | >>> > | 88 | 0 | 4 | >>> > >>> > 0-39g/day (23, 26%), 40-79 (23, 26%), 80-119 (21, 24%), 120+ (21, 24= %) >>> > >>> > *tobgp* >>> > | n | missing | unique | >>> > | 88 | 0 | 4 | >>> > >>> > 0-9g/day (24, 27%), 10-19 (24, 27%), 20-29 (20, 23%), 30+ (20, 23%) >>> > >>> > As you can see, describe() generate a description of my data, and asc= ii >>> > generate org-mode markup as result. The result contains empty rows. S= ince >>> > there is no special characters indicating the end of the results in >>> babel, >>> > replace option will not work in this case. Is there any workaround? >>> > >>> >>> When using ":results org" there is no workaround, as the explicit >>> purpose of this setting is for your results to be inserted directly into >>> the Org-mode buffer w/o any interpretation or alteration. >>> >> >> >>> >>> In general I would recommend keeping a 1-to-1 mapping between code >>> blocks and result items, which should resolve this issue. >>> >>> > >>> > Of course, ascii is not usefull in this case, but it can coerce into >>> > org-mode markup many other R objects (see my previous example and >>> > http://orgmode.org/worg/org-contrib/babel/examples/ascii.php) >>> > >>> >>> I see, that answers my question from above. Thanks >>> >>> Hope this helps -- Eric >>> >>> > >>> > David >>> > >>> > >>> > On Tue, Aug 17, 2010 at 15:57, Eric Schulte >>> wrote: >>> > >>> >> Hi David, >>> >> >>> >> It seems that the problem here is in the ascii package. It is inser= ting >>> >> an empty line at the beginning of your table, so that the table is n= ot >>> >> snugly sitting under the #+results foo tag, because of this the table >>> >> isn't seen as results and is not replaced -- if you delete that space >>> >> then re-run the code block you'll notice that the table is replaced. >>> >> >>> >> Org-mode is very capable of inserting tabular data into Org-mode >>> >> documents without using the ascii package. For example the following >>> >> would be a more idiomatic example of using Org-mode to create a table >>> >> from R code. >>> >> >>> >> --8<---------------cut here---------------start------------->8--- >>> >> #+begin_src R >>> >> numbers <- matrix(c(51,43,22,92,28,21,68,22,9),ncol=3D3,byrow=3DTRU= E) >>> >> numbers >>> >> #+end_src >>> >> >>> >> #+results: >>> >> | 51 | 43 | 22 | >>> >> | 92 | 28 | 21 | >>> >> | 68 | 22 | 9 | >>> >> >>> >> #+begin_src R :colnames yes >>> >> numbers <- matrix(c(51,43,22,92,28,21,68,22,9),ncol=3D3,byrow=3DTRU= E) >>> >> numbers >>> >> #+end_src >>> >> >>> >> #+results: >>> >> | V1 | V2 | V3 | >>> >> |----+----+----| >>> >> | 51 | 43 | 22 | >>> >> | 92 | 28 | 21 | >>> >> | 68 | 22 | 9 | >>> >> --8<---------------cut here---------------end--------------->8--- >>> >> >>> >> or applied to your example, the following code block should generate= the >>> >> desired results. >>> >> >>> >> --8<---------------cut here---------------start------------->8--- >>> >> #+srcname: foo >>> >> #+begin_src R :session *R* >>> >> head(esoph) >>> >> #+end_src >>> >> --8<---------------cut here---------------end--------------->8--- >>> >> >>> >> One last small note: the "replace" argument to :results is normally = the >>> >> default value, and doesn't need to be explicitly added (although I c= an >>> >> see why you would have added it in this case since it wasn't working= as >>> >> expected). >>> >> >>> >> Cheers -- Eric >>> >> >>> >> David Hajage writes: >>> >> >>> >> > I tried the code with the last development version of org-mode: >>> >> > >>> >> > #+srcname: foo >>> >> > #+begin_src R :session *R* :results output org replace >>> >> > library(ascii) >>> >> > options(asciiType =3D "org") >>> >> > ascii(head(esoph)) >>> >> > #+end_src >>> >> > >>> >> > #+results: foo >>> >> > >>> >> > | | agegp | alcgp | tobgp | ncases | ncontrols | >>> >> > |---+-------+-----------+----------+--------+-----------| >>> >> > | 1 | 25-34 | 0-39g/day | 0-9g/day | 0.00 | 40.00 | >>> >> > | 2 | 25-34 | 0-39g/day | 10-19 | 0.00 | 10.00 | >>> >> > | 3 | 25-34 | 0-39g/day | 20-29 | 0.00 | 6.00 | >>> >> > | 4 | 25-34 | 0-39g/day | 30+ | 0.00 | 5.00 | >>> >> > | 5 | 25-34 | 40-79 | 0-9g/day | 0.00 | 27.00 | >>> >> > | 6 | 25-34 | 40-79 | 10-19 | 0.00 | 7.00 | >>> >> > >>> >> > | | agegp | alcgp | tobgp | ncases | ncontrols | >>> >> > |---+-------+-----------+----------+--------+-----------| >>> >> > | 1 | 25-34 | 0-39g/day | 0-9g/day | 0.00 | 40.00 | >>> >> > | 2 | 25-34 | 0-39g/day | 10-19 | 0.00 | 10.00 | >>> >> > | 3 | 25-34 | 0-39g/day | 20-29 | 0.00 | 6.00 | >>> >> > | 4 | 25-34 | 0-39g/day | 30+ | 0.00 | 5.00 | >>> >> > | 5 | 25-34 | 40-79 | 0-9g/day | 0.00 | 27.00 | >>> >> > | 6 | 25-34 | 40-79 | 10-19 | 0.00 | 7.00 | >>> >> > >>> >> > There is no more ">", but an extra space. >>> >> > But, the replace option doesn't work: results are still appended. = I am >>> >> not >>> >> > an org-mode guru (far, far away), but I think this is because when >>> output >>> >> is >>> >> > org, there is no indication about the "end" of the results. >>> >> > >>> >> > David >>> >> > >>> >> > >>> >> > On Tue, Aug 17, 2010 at 10:17, David Hajage >>> wrote: >>> >> > >>> >> >> Hello, >>> >> >> >>> >> >> I am trying to use babel with R. Here the code: >>> >> >> >>> >> >> #+srcname: foo >>> >> >> #+begin_src R :session *R* :results output org replace >>> >> >> library(ascii) >>> >> >> options(asciiType =3D "org") >>> >> >> ascii(head(esoph)) >>> >> >> #+end_src >>> >> >> >>> >> >> #+results: foo >>> >> >> >>> >> >> > | | agegp | alcgp | tobgp | ncases | ncontrols | >>> >> >> |---+-------+-----------+----------+--------+-----------| >>> >> >> | 1 | 25-34 | 0-39g/day | 0-9g/day | 0.00 | 40.00 | >>> >> >> | 2 | 25-34 | 0-39g/day | 10-19 | 0.00 | 10.00 | >>> >> >> | 3 | 25-34 | 0-39g/day | 20-29 | 0.00 | 6.00 | >>> >> >> | 4 | 25-34 | 0-39g/day | 30+ | 0.00 | 5.00 | >>> >> >> | 5 | 25-34 | 40-79 | 0-9g/day | 0.00 | 27.00 | >>> >> >> | 6 | 25-34 | 40-79 | 10-19 | 0.00 | 7.00 | >>> >> >> >>> >> >> > | | agegp | alcgp | tobgp | ncases | ncontrols | >>> >> >> |---+-------+-----------+----------+--------+-----------| >>> >> >> | 1 | 25-34 | 0-39g/day | 0-9g/day | 0.00 | 40.00 | >>> >> >> | 2 | 25-34 | 0-39g/day | 10-19 | 0.00 | 10.00 | >>> >> >> | 3 | 25-34 | 0-39g/day | 20-29 | 0.00 | 6.00 | >>> >> >> | 4 | 25-34 | 0-39g/day | 30+ | 0.00 | 5.00 | >>> >> >> | 5 | 25-34 | 40-79 | 0-9g/day | 0.00 | 27.00 | >>> >> >> | 6 | 25-34 | 40-79 | 10-19 | 0.00 | 7.00 | >>> >> >> >>> >> >> With org-mode 7.01g in emacs 23, there is two problems: >>> >> >> - an extra ">" is added in the first line while output is "org" >>> >> >> - when I run the code twice, the new results is appended, while I >>> have >>> >> the >>> >> >> option "replace". >>> >> >> >>> >> >> Is there any problem with my header? >>> >> >> >>> >> >> Thank you very much for your help. >>> >> >> David >>> >> >> >>> >> > _______________________________________________ >>> >> > 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 >>> >> >>> >>> Footnotes: >>> [1] http://orgmode.org/manual/Header-arguments.html#Header-arguments >>> >>> [2] >>> http://orgmode.org/manual/Results-of-evaluation.html#Results-of-evaluat= ion >>> >>> >>> L'int=C3=A9grit=C3=A9 de ce message n'=C3=A9tant pas assur=C3=A9e sur I= nternet, l'Institut >>> Curie ne peut =C3=AAtre tenu responsable de son contenu. >>> Si vous n'=C3=AAtes pas destinataire de ce message confidentiel, merci = de le >>> d=C3=A9truire et d'avertir imm=C3=A9diatement l'exp=C3=A9diteur. >>> Afin de contribuer au respect de l'environnement, merci de n'imprimer ce >>> mail qu'en cas de n=C3=A9cessit=C3=A9. >>> Footnotes:=20 [1]=20=20 ,----[org-babel-insert-result] | org-babel-insert-result is a Lisp function in `ob.el'. |=20 | (org-babel-insert-result RESULT &optional RESULT-PARAMS INFO HASH | INDENT LANG) |=20 | Insert RESULT into the current buffer. | By default RESULT is inserted after the end of the | current source block. With optional argument RESULT-PARAMS | controls insertion of results in the org-mode file. | RESULT-PARAMS can take the following values... |=20 | replace - (default option) insert results after the source block | replacing any previously inserted results |=20 | silent -- no results are inserted |=20 | file ---- the results are interpreted as a file path, and are | inserted into the buffer using the Org-mode file syntax |=20 | raw ----- results are added directly to the org-mode file. This | is a good option if you code block will output org-mode | formatted text. |=20 | org ----- this is the same as the 'raw' option |=20 | html ---- results are added inside of a #+BEGIN_HTML block. This | is a good option if you code block will output html | formatted text. |=20 | latex --- results are added inside of a #+BEGIN_LATEX block. | This is a good option if you code block will output | latex formatted text. |=20 | code ---- the results are extracted in the syntax of the source | code of the language being evaluated and are added | inside of a #+BEGIN_SRC block with the source-code | language set appropriately. Note this relies on the | optional LANG argument. |=20 | [back] `---- [2]=20=20 ,---- | ob-org has two non-standard header arguments in that it exports it's | results by default and the result type defaults to raw, this ensures | that the body of a begin_src org block exports transparently. |=20 | This is a breaking change in that if you are currently using org | code blocks to export org-fontified code you will have to set the | ":exports" header argument for org-mode blocks to "code" on a block, | file, language or system-wide basis. `----