From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Eric Schulte" Subject: Re: Re: problem with babel and R Date: Wed, 18 Aug 2010 16:13:32 -0600 Message-ID: <87d3tflgc3.fsf@gmail.com> References: <87tymtnxzi.fsf@gmail.com> <1668ca$1pq4c@mail.curie.net> 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=38069 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1OlqtB-00057t-Cj for emacs-orgmode@gnu.org; Wed, 18 Aug 2010 18:13:42 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1Olqt9-0004I9-Lz for emacs-orgmode@gnu.org; Wed, 18 Aug 2010 18:13:41 -0400 Received: from mail-pv0-f169.google.com ([74.125.83.169]:42300) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1Olqt9-0004I4-CC for emacs-orgmode@gnu.org; Wed, 18 Aug 2010 18:13:39 -0400 Received: by pvc30 with SMTP id 30so674855pvc.0 for ; Wed, 18 Aug 2010 15:13:37 -0700 (PDT) In-Reply-To: (David Hajage's message of "Wed, 18 Aug 2010 08:53:33 +0200") 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 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 output > 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 wrot= e: > >> 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 "#+results= :", >> > until the first empty line. But what happens if the result contains em= pty >> > 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 ascii >> > generate org-mode markup as result. The result contains empty rows. Si= nce >> > 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 insert= ing >> >> an empty line at the beginning of your table, so that the table is not >> >> 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=3DTRUE) >> >> 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=3DTRUE) >> >> 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 t= he >> >> default value, and doesn't need to be explicitly added (although I can >> >> 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-evaluati= on >> >> >> L'int=C3=A9grit=C3=A9 de ce message n'=C3=A9tant pas assur=C3=A9e sur In= ternet, l'Institut >> Curie ne peut =C3=AAtre tenu responsable de son contenu. >> Si vous n'=C3=AAtes pas destinataire de ce message confidentiel, merci d= e 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. >>