diff --git a/lisp/ob-R.el b/lisp/ob-R.el index ea4df18fd..f48ce3756 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)