summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Davison <davison@stats.ox.ac.uk>2010-10-14 21:08:21 +0100
committerDan Davison <davison@stats.ox.ac.uk>2010-10-21 13:05:58 +0100
commit1bc914cd7aace0b81abcdde0b8fe74a28eae5c02 (patch)
tree7321fc6b06f1eba9f8f62e31647e08500eb7c3b2
parent21e67385930a78fa9666a6244e882a25dc2605fc (diff)
downloadorg-mode-1bc914cd7aace0b81abcdde0b8fe74a28eae5c02.tar.gz
babel: R: Fix variable assignments made by `org-babel-prep-session:R'
* ob-R.el (org-babel-expand-body:R): Refactor: break variable assignment part out into a separate function (org-babel-R-variable-assignments): New function constructing list of variable assignment statements (org-babel-prep-session:R): Use new function `org-babel-R-variable-assignments' instead of previous (incorrect) variable assignment code.
-rw-r--r--lisp/ob-R.el52
1 files changed, 23 insertions, 29 deletions
diff --git a/lisp/ob-R.el b/lisp/ob-R.el
index ea4df18..f48ce37 100644
--- a/lisp/ob-R.el
+++ b/lisp/ob-R.el
@@ -53,18 +53,8 @@
(defun org-babel-expand-body:R (body params &optional processed-params)
"Expand BODY according to PARAMS, return the expanded body."
- (let* ((processed-params (or processed-params
- (org-babel-process-params params)))
- (vars (mapcar
- (lambda (i)
- (cons (car (nth i (nth 1 processed-params)))
- (org-babel-reassemble-table
- (cdr (nth i (nth 1 processed-params)))
- (cdr (nth i (nth 4 processed-params)))
- (cdr (nth i (nth 5 processed-params))))))
- (org-number-sequence 0 (1- (length (nth 1 processed-params))))))
- (out-file (cdr (assoc :file params))))
- (mapconcat ;; define any variables
+ (let (out-file (cdr (assoc :file params)))
+ (mapconcat
#'org-babel-trim
((lambda (inside)
(if out-file
@@ -73,15 +63,7 @@
inside
(list "dev.off()"))
inside))
- (append
- (mapcar
- (lambda (pair)
- (org-babel-R-assign-elisp
- (car pair) (cdr pair)
- (equal "yes" (cdr (assoc :colnames params)))
- (equal "yes" (cdr (assoc :rownames params)))))
- vars)
- (list body))) "\n")))
+ (append (org-babel-R-variable-assignments params) (list body))) "\n")))
(defun org-babel-execute:R (body params)
"Execute a block of R code.
@@ -108,14 +90,7 @@ This function is called by `org-babel-execute-src-block'."
(defun org-babel-prep-session:R (session params)
"Prepare SESSION according to the header arguments specified in PARAMS."
(let* ((session (org-babel-R-initiate-session session params))
- (vars (org-babel-ref-variables params))
- (var-lines
- (mapcar
- (lambda (pair) (org-babel-R-assign-elisp
- (car pair) (cdr pair)
- (equal (cdr (assoc :colnames params)) "yes")
- (equal (cdr (assoc :rownames params)) "yes")))
- vars)))
+ (var-lines (org-babel-R-variable-assignments params)))
(org-babel-comint-in-buffer session
(mapc (lambda (var)
(end-of-line 1) (insert var) (comint-send-input nil t)
@@ -133,6 +108,25 @@ This function is called by `org-babel-execute-src-block'."
;; helper functions
+(defun org-babel-R-variable-assignments (params &optional processed-params)
+ "Return list of R statements assigning the block's variables"
+ (let ((processed-params (or processed-params
+ (org-babel-process-params params))))
+ (mapcar
+ (lambda (pair)
+ (org-babel-R-assign-elisp
+ (car pair) (cdr pair)
+ (equal "yes" (cdr (assoc :colnames params)))
+ (equal "yes" (cdr (assoc :rownames params)))))
+ (mapcar
+ (lambda (i)
+ (cons (car (nth i (nth 1 processed-params)))
+ (org-babel-reassemble-table
+ (cdr (nth i (nth 1 processed-params)))
+ (cdr (nth i (nth 4 processed-params)))
+ (cdr (nth i (nth 5 processed-params))))))
+ (org-number-sequence 0 (1- (length (nth 1 processed-params))))))))
+
(defun org-babel-R-quote-tsv-field (s)
"Quote field S for export to R."
(if (stringp s)