diff options
author | Aaron Ecay <aaronecay@gmail.com> | 2014-08-07 01:51:37 -0400 |
---|---|---|
committer | Aaron Ecay <aaronecay@gmail.com> | 2014-08-07 01:54:23 -0400 |
commit | b51746332dca87a35c387b2db0bb678b4c24a4da (patch) | |
tree | 6ba55f5b6ebc41305772c22079dda99298073b5e | |
parent | d035c1476537ca93594bf07ed2faebca2dafade3 (diff) | |
download | org-mode-b51746332dca87a35c387b2db0bb678b4c24a4da.tar.gz |
ob-R.el: Improve the capturing of output-type results in sessions.
* lisp/ob-R.el (org-babel-R-evaluate-session): Improve the capturing
of R output.
This uses a built-in facility of R to write the output to a file,
rather than trying to capture it in an emacs buffer using ESS (a
process by which the output can get mixed with other irrelevant text,
such as R command prompts).
-rw-r--r-- | lisp/ob-R.el | 33 |
1 files changed, 15 insertions, 18 deletions
diff --git a/lisp/ob-R.el b/lisp/ob-R.el index 9f4eb4b..a7965af 100644 --- a/lisp/ob-R.el +++ b/lisp/ob-R.el @@ -365,7 +365,7 @@ last statement in BODY, as elisp." (defvar ess-eval-visibly-p) (defun org-babel-R-evaluate-session - (session body result-type result-params column-names-p row-names-p) + (session body result-type result-params column-names-p row-names-p) "Evaluate BODY in SESSION. If RESULT-TYPE equals 'output then return standard output as a string. If RESULT-TYPE equals 'value then return the value of the @@ -395,23 +395,20 @@ last statement in BODY, as elisp." (org-babel-import-elisp-from-file tmp-file '(16))) column-names-p))) (output - (mapconcat - 'org-babel-chomp - (butlast - (delq nil - (mapcar - (lambda (line) (when (> (length line) 0) line)) - (mapcar - (lambda (line) ;; cleanup extra prompts left in output - (if (string-match - "^\\([ ]*[>+\\.][ ]?\\)+\\([[0-9]+\\|[ ]\\)" line) - (substring line (match-end 1)) - line)) - (org-babel-comint-with-output (session org-babel-R-eoe-output) - (insert (mapconcat 'org-babel-chomp - (list body org-babel-R-eoe-indicator) - "\n")) - (inferior-ess-send-input)))))) "\n")))) + (let* ((output-file (org-babel-temp-file "R-")) + (sentinel-file (concat output-file "-sentinel"))) + (org-babel-comint-eval-invisibly-and-wait-for-file + session sentinel-file + (format "capture.output({%s}, file=%S); file.create(%S)" + (org-babel-chomp body) + output-file + sentinel-file)) + (with-temp-buffer + (insert-file-contents output-file) + (goto-char (point-min)) + (flush-lines "^$") + (delete-trailing-whitespace) + (buffer-string)))))) (defun org-babel-R-process-value-result (result column-names-p) "R-specific processing of return value. |