Browse Source

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.
Dan Davison 14 years ago
parent
commit
1bc914cd7a
1 changed files with 23 additions and 29 deletions
  1. 23 29
      lisp/ob-R.el

+ 23 - 29
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)