From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Eric Schulte" Subject: Re: [PATCH] babel: add a :rownames argument to R code blocks Date: Thu, 25 Mar 2010 07:39:18 -0600 Message-ID: <878w9go6bt.fsf@gmail.com> References: <87eij95n7m.fsf@z.nozav.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Return-path: Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1NunVg-00016J-4y for emacs-orgmode@gnu.org; Thu, 25 Mar 2010 09:54:08 -0400 Received: from [140.186.70.92] (port=35860 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NunVd-00014w-JX for emacs-orgmode@gnu.org; Thu, 25 Mar 2010 09:54:07 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1NunVb-0008NF-CN for emacs-orgmode@gnu.org; Thu, 25 Mar 2010 09:54:05 -0400 Received: from mail-px0-f191.google.com ([209.85.216.191]:54402) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1NunVb-0008N7-48 for emacs-orgmode@gnu.org; Thu, 25 Mar 2010 09:54:03 -0400 Received: by pxi29 with SMTP id 29so3892897pxi.7 for ; Thu, 25 Mar 2010 06:54:02 -0700 (PDT) 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: Julien Barnier Cc: emacs-orgmode@gnu.org Hi Julien, Thanks for the patch, however it looks like the attached patch breaks columnname support for R source code blocks. I'm pasting in the relevant portion of our test suite, from the development.org file in our development repository [1]. Could you please sort this issue out before we apply the patch? Thanks -- Eric relevant test... the final source block should return 169 #+tblname: test-table-colnames | var1 | var2 | var3 | |------+------+------| | 1 | 22 | 13 | | 41 | 55 | 67 | #+srcname: R-square(x=default-name-doesnt-exist) #+begin_src R :colnames yes x^2 #+end_src This should return 169. The fact that R is able to use the column name to index the data frame (x$var3) proves that a table with column names (a header row) has been recognised as input for the R-square function block, and that the R-square block has output an elisp table with column names, and that the colnames have again been recognised when creating the R variables in this block. #+srcname: table-R-colnames-org(x = R-square(x=test-table-colnames)) #+begin_src R x$var3[1] #+end_src Julien Barnier writes: > Hi, > > The following simple patch add a :rownames argument to R source code > blocks in org-babel. With :rownames yes it allows to export the row > names when the result is a table. > > For example : > > #+BEGIN_SRC R :session :colnames yes :rownames yes > table(d$sexe,d$cuisine) > #+END_SRC > > #+results: > | | Non | Oui | > |-------+-----+-----| > | Homme | 2 | 2 | > | Femme | 4 | 2 | > > Thanks a lot for all your work ! > > Julien > > --- > contrib/babel/lisp/langs/org-babel-R.el | 12 +++++++----- > 1 files changed, 7 insertions(+), 5 deletions(-) > > diff --git a/contrib/babel/lisp/langs/org-babel-R.el b/contrib/babel/lisp/langs/org-babel-R.el > index a8071b2..f0d79b9 100644 > --- a/contrib/babel/lisp/langs/org-babel-R.el > +++ b/contrib/babel/lisp/langs/org-babel-R.el > @@ -46,6 +46,8 @@ called by `org-babel-execute-src-block'." > (vars (second processed-params)) > (column-names-p (and (cdr (assoc :colnames params)) > (string= "yes" (cdr (assoc :colnames params))))) > + (row-names-p (and (cdr (assoc :rownames params)) > + (string= "yes" (cdr (assoc :rownames params))))) > (out-file (cdr (assoc :file params))) > (augmented-body > (concat > @@ -53,7 +55,7 @@ called by `org-babel-execute-src-block'." > (mapconcat ;; define any variables > (lambda (pair) (org-babel-R-assign-elisp (car pair) (cdr pair))) vars "\n") > "\n" body "\n" (if out-file "dev.off()\n" ""))) > - (result (org-babel-R-evaluate session augmented-body result-type column-names-p))) > + (result (org-babel-R-evaluate session augmented-body result-type column-names-p row-names-p))) > (or out-file result)))) > > (defun org-babel-prep-session:R (session params) > @@ -133,9 +135,9 @@ called by `org-babel-execute-src-block'." > (defvar org-babel-R-eoe-indicator "'org_babel_R_eoe'") > (defvar org-babel-R-eoe-output "[1] \"org_babel_R_eoe\"") > (defvar org-babel-R-wrapper-method "main <- function ()\n{\n%s\n} > -write.table(main(), file=\"%s\", sep=\"\\t\", na=\"nil\",row.names=FALSE, col.names=%s, quote=FALSE)") > +write.table(main(), file=\"%s\", sep=\"\\t\", na=\"nil\",row.names=%s, col.names=%s, quote=FALSE)") > > -(defun org-babel-R-evaluate (session body result-type column-names-p) > +(defun org-babel-R-evaluate (session body result-type column-names-p row-names-p) > "Pass BODY to the R process in SESSION. If RESULT-TYPE equals > 'output then return a list of the outputs of the statements in > BODY, if RESULT-TYPE equals 'value then return the value of the > @@ -153,7 +155,7 @@ last statement in BODY, as elisp." > (stderr > (with-temp-buffer > (insert (format org-babel-R-wrapper-method > - body tmp-file (if column-names-p "TRUE" "FALSE"))) > + body tmp-file (if row-names-p "TRUE" "FALSE") (if column-names-p (if row-names-p "NA" "TRUE") "FALSE"))) > (setq exit-code (org-babel-shell-command-on-region > (point-min) (point-max) "R --no-save" nil 'replace (current-buffer))) > (buffer-string)))) > @@ -168,7 +170,7 @@ last statement in BODY, as elisp." > (case result-type > (value > (mapconcat #'org-babel-chomp (list body > - (format "write.table(.Last.value, file=\"%s\", sep=\"\\t\", na=\"nil\",row.names=FALSE, col.names=%s, quote=FALSE)" tmp-file (if column-names-p "TRUE" "FALSE")) > + (format "write.table(.Last.value, file=\"%s\", sep=\"\\t\", na=\"nil\",row.names=%s, col.names=%s, quote=FALSE)" tmp-file (if row-names-p "TRUE" "FALSE") (if column-names-p (if row-names-p "NA" "TRUE") "FALSE")) > org-babel-R-eoe-indicator) "\n")) > (output > (mapconcat #'org-babel-chomp (list body org-babel-R-eoe-indicator) "\n")))) Footnotes: [1] http://eschulte.github.com/babel-dev/