浏览代码

org-babel-expand-body:R

Dan Davison 15 年之前
父节点
当前提交
8872454566
共有 1 个文件被更改,包括 20 次插入15 次删除
  1. 20 15
      contrib/babel/lisp/langs/org-babel-R.el

+ 20 - 15
contrib/babel/lisp/langs/org-babel-R.el

@@ -35,6 +35,22 @@
 
 (add-to-list 'org-babel-tangle-langs '("R" "R" "#!/usr/bin/env Rscript"))
 
+(defun org-babel-expand-body:R (body params &optional processed-params)
+  (let* ((processed-params (or processed-params
+                               (org-babel-process-params params)))
+	 (vars (mapcar (lambda (i) (cons (car (nth i (second processed-params)))
+					 (org-babel-reassemble-table
+					  (cdr (nth i (second processed-params)))
+					  (cdr (nth i (fifth processed-params)))
+					  (cdr (nth i (sixth processed-params))))))
+		       (number-sequence 0 (1- (length (second processed-params))))))
+         (out-file (cdr (assoc :file params))))
+    (concat
+     (if out-file (concat (org-babel-R-construct-graphics-device-call out-file params) "\n") "")
+     (mapconcat ;; define any variables
+      (lambda (pair) (org-babel-R-assign-elisp (car pair) (cdr pair))) vars "\n")
+     "\n" body "\n" (if out-file "dev.off()\n" ""))))
+
 (defun org-babel-execute:R (body params)
   "Execute a block of R code with org-babel.  This function is
 called by `org-babel-execute-src-block'."
@@ -43,24 +59,13 @@ called by `org-babel-execute-src-block'."
     (let* ((processed-params (org-babel-process-params params))
            (result-type (fourth processed-params))
            (session (org-babel-R-initiate-session (first processed-params) params))
-           (vars (mapcar (lambda (i) (cons (car (nth i (second processed-params)))
-					   (org-babel-reassemble-table
-					    (cdr (nth i (second processed-params)))
-					    (cdr (nth i (fifth processed-params)))
-					    (cdr (nth i (sixth processed-params))))))
-			 (number-sequence 0 (1- (length (second processed-params))))))
 	   (colnames-p (and (cdr (assoc :colnames params))
-				(string= "yes" (cdr (assoc :colnames params)))))
+			    (string= "yes" (cdr (assoc :colnames params)))))
 	   (rownames-p (and (cdr (assoc :rownames params))
-				(string= "yes" (cdr (assoc :rownames params)))))
+			    (string= "yes" (cdr (assoc :rownames params)))))
 	   (out-file (cdr (assoc :file params)))
-	   (augmented-body
-	    (concat
-	     (if out-file (concat (org-babel-R-construct-graphics-device-call out-file params) "\n") "")
-	     (mapconcat ;; define any variables
-	      (lambda (pair) (org-babel-R-assign-elisp (car pair) (cdr pair) colnames-p rownames-p)) vars "\n")
-	     "\n" body "\n" (if out-file "dev.off()\n" "")))
-	   (result (org-babel-R-evaluate session augmented-body result-type colnames-p rownames-p)))
+	   (full-body (org-babel-expand-body:R body params processed-params))
+	   (result (org-babel-R-evaluate session full-body result-type column-names-p)))
       (or out-file result))))
 
 (defun org-babel-prep-session:R (session params)