diff --git a/lisp/org-babel-R.el b/lisp/org-babel-R.el index 70087e191..e81d97d70 100644 --- a/lisp/org-babel-R.el +++ b/lisp/org-babel-R.el @@ -79,18 +79,18 @@ R process in `org-babel-R-buffer'." `org-babel-R-buffer' as Emacs lisp." (let ((tmp-file (make-temp-file "org-babel-R")) result) (org-babel-R-input-command - (format "write.table(%s(), \"%s\", , ,\"\\t\", ,\"nil\", , FALSE, FALSE)" func-name tmp-file)) + (format "write.table(%s(), file=\"%s\", sep=\"\\t\", na=\"nil\",row.names=FALSE, col.names=TRUE, quote=FALSE)" + func-name tmp-file)) (with-temp-buffer - (message "before condition") (condition-case nil (progn (org-table-import tmp-file nil) (delete-file tmp-file) (setq result (mapcar (lambda (row) (mapcar #'org-babel-R-read row)) - (org-table-to-lisp)))) + (org-table-to-lisp))) + (setq result (org-babel-R-set-header-row result))) (error nil)) - (message "after condition") (if (null (cdr result)) ;; if result is trivial vector, then scalarize it (if (consp (car result)) (if (null (cdr (car result))) @@ -99,6 +99,20 @@ R process in `org-babel-R-buffer'." (car result)) result)))) +(defun org-babel-R-set-header-row (table) + "Check whether the table appears to have (a) genuine +user-supplied column names, or (b) default column names added +automatically by R. In case (a), maintain the first row of the +table as a header row and insert an hline. In case (b), remove +the first row and return the org table without an hline." + (if (string-equal (caar table) "V1") + ;; The first row looks like it contains default column names + ;; added by R. This condition could be improved so that it + ;; checks whether the first row is ("V1" "V2" ... "V$n") where + ;; $n is the number of columns. + (cdr table) + (cons (car table) (cons 'hline (cdr table))))) + (defun org-babel-R-read (cell) "Strip nested \"s from around strings in exported R values." (org-babel-read (or (and (stringp cell)