mirror of
https://git.savannah.gnu.org/git/emacs/org-mode.git
synced 2024-09-30 05:07:48 +00:00
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.
This commit is contained in:
parent
21e6738593
commit
1bc914cd7a
52
lisp/ob-R.el
52
lisp/ob-R.el
|
@ -53,18 +53,8 @@
|
||||||
|
|
||||||
(defun org-babel-expand-body:R (body params &optional processed-params)
|
(defun org-babel-expand-body:R (body params &optional processed-params)
|
||||||
"Expand BODY according to PARAMS, return the expanded body."
|
"Expand BODY according to PARAMS, return the expanded body."
|
||||||
(let* ((processed-params (or processed-params
|
(let (out-file (cdr (assoc :file params)))
|
||||||
(org-babel-process-params params)))
|
(mapconcat
|
||||||
(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
|
|
||||||
#'org-babel-trim
|
#'org-babel-trim
|
||||||
((lambda (inside)
|
((lambda (inside)
|
||||||
(if out-file
|
(if out-file
|
||||||
|
@ -73,15 +63,7 @@
|
||||||
inside
|
inside
|
||||||
(list "dev.off()"))
|
(list "dev.off()"))
|
||||||
inside))
|
inside))
|
||||||
(append
|
(append (org-babel-R-variable-assignments params) (list body))) "\n")))
|
||||||
(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")))
|
|
||||||
|
|
||||||
(defun org-babel-execute:R (body params)
|
(defun org-babel-execute:R (body params)
|
||||||
"Execute a block of R code.
|
"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)
|
(defun org-babel-prep-session:R (session params)
|
||||||
"Prepare SESSION according to the header arguments specified in PARAMS."
|
"Prepare SESSION according to the header arguments specified in PARAMS."
|
||||||
(let* ((session (org-babel-R-initiate-session session params))
|
(let* ((session (org-babel-R-initiate-session session params))
|
||||||
(vars (org-babel-ref-variables params))
|
(var-lines (org-babel-R-variable-assignments 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)))
|
|
||||||
(org-babel-comint-in-buffer session
|
(org-babel-comint-in-buffer session
|
||||||
(mapc (lambda (var)
|
(mapc (lambda (var)
|
||||||
(end-of-line 1) (insert var) (comint-send-input nil t)
|
(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
|
;; 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)
|
(defun org-babel-R-quote-tsv-field (s)
|
||||||
"Quote field S for export to R."
|
"Quote field S for export to R."
|
||||||
(if (stringp s)
|
(if (stringp s)
|
||||||
|
|
Loading…
Reference in a new issue