From 911e77a7c966ec5d073c67bc153e197d5edb9fd9 Mon Sep 17 00:00:00 2001 From: Dan Davison Date: Sun, 19 Jul 2009 12:01:00 -0400 Subject: [PATCH] Code rearrangement: restrict R column names changes to org-babel-R.el. On reflection this is (currently) R-specific functionality and should not affect the code in org-babel.el. --- lisp/langs/org-babel-R.el | 22 ++++++++++++++++------ lisp/org-babel.el | 18 ++++++++---------- 2 files changed, 24 insertions(+), 16 deletions(-) diff --git a/lisp/langs/org-babel-R.el b/lisp/langs/org-babel-R.el index 3bd48793..b401a407 100644 --- a/lisp/langs/org-babel-R.el +++ b/lisp/langs/org-babel-R.el @@ -46,8 +46,8 @@ called by `org-babel-execute-src-block' via multiple-value-bind." (org-babel-R-assign-elisp (car pair) (cdr pair))) vars "\n") "\n" body "\n")) (session (org-babel-R-initiate-session session)) - (colnames (cdr (assoc :colnames params)))) - (org-babel-R-evaluate session full-body result-type colnames)))) + (column-names-p (cdr (assoc :colnames params)))) + (org-babel-R-evaluate session full-body result-type column-names-p)))) (defun org-babel-prep-session:R (session params) "Prepare SESSION according to the header arguments specified in PARAMS." @@ -110,14 +110,15 @@ last statement in BODY, as elisp." (value (with-temp-file in-tmp-file (insert (format org-babel-R-wrapper-method - body out-tmp-file (if colnames "TRUE" "FALSE")))) + body out-tmp-file (if column-names-p "TRUE" "FALSE")))) (shell-command (format "R --no-save < '%s'" in-tmp-file)) - (org-babel-import-elisp-from-file out-tmp-file colnames)))) + (org-babel-R-process-value-result + (org-babel-import-elisp-from-file out-tmp-file) column-names-p)))) ;; comint session evaluation (org-babel-comint-in-buffer buffer (let* ((tmp-file (make-temp-file "org-babel-R")) (last-value-eval - (format "write.table(.Last.value, file=\"%s\", sep=\"\\t\", na=\"nil\",row.names=FALSE, col.names=%s, quote=FALSE)" tmp-file (if colnames "TRUE" "FALSE"))) + (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"))) (full-body (mapconcat #'org-babel-chomp (list body last-value-eval org-babel-R-eoe-indicator) "\n")) (raw (org-babel-comint-with-output buffer org-babel-R-eoe-output nil @@ -139,8 +140,17 @@ last statement in BODY, as elisp." (mapcar #'org-babel-trim raw)))))) (case result-type (output (org-babel-chomp (mapconcat #'identity results "\n"))) - (value (org-babel-import-elisp-from-file tmp-file colnames))))))) + (value (org-babel-R-process-value-result + (org-babel-import-elisp-from-file tmp-file) column-names-p))))))) +(defun org-babel-R-process-value-result (result column-names-p) + "R-specific processing of return value prior to return to org-babel. + +Currently, insert hline if column names in output have been requested." + (if column-names-p + (cons (car result) (cons 'hline (cdr result))) + result)) + (provide 'org-babel-R) ;;; org-babel-R.el ends here diff --git a/lisp/org-babel.el b/lisp/org-babel.el index 6232f4cd..a2cc4ce4 100644 --- a/lisp/org-babel.el +++ b/lisp/org-babel.el @@ -566,7 +566,7 @@ This is taken almost directly from `org-read-prop'." (if (string-match "^[[:digit:]]*\\.?[[:digit:]]*$" string) (string-to-number string))) -(defun org-babel-import-elisp-from-file (file-name &optional colnames) +(defun org-babel-import-elisp-from-file (file-name) "Read the results located at FILE-NAME into an elisp table. If the table is trivial, then return it as a scalar." (let (result) @@ -579,15 +579,13 @@ the table is trivial, then return it as a scalar." (mapcar #'org-babel-string-read row)) (org-table-to-lisp)))) (error nil))) - (if colnames - (setq result (cons (car result) (cons 'hline (cdr result)))) - (if (null (cdr result)) ;; if result is trivial vector, then scalarize it - (if (consp (car result)) - (if (null (cdr (car result))) - (caar result) - result) - (car result)) - result)))) + (if (null (cdr result)) ;; if result is trivial vector, then scalarize it + (if (consp (car result)) + (if (null (cdr (car result))) + (caar result) + result) + (car result)) + result))) (defun org-babel-string-read (cell) "Strip nested \"s from around strings in exported R values." -- 2.11.4.GIT