Browse Source

Revert "Revert "Make org table result have header row and hline when appropriate...""

This reverts commit dff01091dc72f83a5c92ae87a1b4824af1ecd334.

Yes, this is a reversion of a reversion, as the original commit has
been reverted in the master branch, I'm now just going to revert the
reversion and then merge with master to maintain inter-branch
cohesion.

oh, did I mention... "revert"
Eric Schulte 16 years ago
parent
commit
39f7174884
1 changed files with 18 additions and 4 deletions
  1. 18 4
      lisp/org-babel-R.el

+ 18 - 4
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)