Make org table result have header row and hline when appropriate. (This should have been included with commit a39d68640e). The approach I've taken is to make R always write the column names into the tsv file. If the result does not have user-supplied column-names, then R writes default column names of the form V1,V2,...,V$numcols. After reading the tsv back into lisp, we check whether it has "real" column names or the R defaults. If it has real column names, then I give the org table an hline.

I expect this will conflict with Eric's work on sessions, but we can deal with that.

There is a remaining quoting issue that needs to be dealt
with. E.g. with an unquoted string in the input, it comes out as
quoted in the result. This seems bad, since if you use the output as
new input you get something different (with extra
quoting). (non-idempotence if that's the right term).

| col1 | col2    | col3 |
|------+---------+------|
|    1 | 2       |    3 |
|    4 | schulte |    6 |

tabel

| "col1" | "col2"    | "col3" |
|--------+-----------+--------|
|      1 | 2         |      3 |
|      4 | "schulte" |      6 |
This commit is contained in:
Dan Davison 2009-05-30 16:45:26 -04:00
parent eb29bef93f
commit e4263daf76

View file

@ -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)