فهرست منبع

org-R-to-elisp is working

it is now able to
1) write the R function to a tab separated table
2) read that table into elisp and return
3) clean up after itself
Eric Schulte 17 سال پیش
والد
کامیت
f8d76eb030
2فایلهای تغییر یافته به همراه13 افزوده شده و 36 حذف شده
  1. 11 36
      litorgy/litorgy-R.el
  2. 2 0
      rorg.org

+ 11 - 36
litorgy/litorgy-R.el

@@ -35,21 +35,6 @@
 
 (defvar litorgy-R-var-name "litorgy_R_variable")
 
-(defvar litorgy-R-var-as-table
-  "write.org.table <- function (x, write.rownames = TRUE) 
-{
-    if(!is.null(dim(x)) && length(dim(x)) > 2)
-        stop(\"Object must be 1- or 2-dimensional\") ;
-    if(is.vector(x) || is.table(x) || is.factor(x) || is.array(x)) 
-        x <- as.matrix(x) ;
-    if(!(is.matrix(x) || inherits(x, c('matrix', 'data.frame')))) {
-       invisible() ;
-       print(x) ;
-       stop(\"Object not recognised as 1- or 2-dimensional\") ;
-    } ;
-    x
-}")
-
 (defun litorgy-execute:R (body params)
   "Execute a block of R code with litorgy.  This function is
 called by `litorgy-execute-src-block'."
@@ -65,27 +50,17 @@ called by `litorgy-execute-src-block'."
       (litorgy-R-initiate-R-buffer)
       (litorgy-R-command-to-string body))))
 
-(defun litorgy-R-table-or-scalar (var-name)
-  "Determine whether the variable in `litorgy-R-buffer' named
-VAR-NAME has any associated dimensions.  If it does have
-dimensions then return it as a list, otherwise just read it as a
-single variable."
-  (if (litorgy-R-multidimensional-p var-name)
-      (litorgy-R-vecotr-to-elisp-list var-name)
-    (read result)))
-
-(defun litorgy-R-multidimensional-p (var-name)
-  "Return t if the variable named VAR-NAME in `litorgy-R-buffer'
-is multidimensional."
-  
-  )
-
-(defun litorgy-R-vector-to-elisp-list (var-name)
-  "Assumes that var-name is multidimensional in which case it
-then converts it's value into an Emacs-lisp list which is
-returned."
-  
-  )
+(defun litorgy-R-to-elisp (func-name)
+  "Return the result of calling the function named FUNC-NAME in
+`litorgy-R-buffer' as Emacs lisp."
+  (let ((tmp-file (make-temp-file "litorgy-R")))
+    (message (format "temp-file=%s" tmp-file))
+    (litorgy-R-input-command
+     (format "write.table(%s(), \"%s\", , ,\"\\t\", ,\"nil\", , FALSE, FALSE)" func-name tmp-file))
+    (with-temp-buffer
+      (org-table-import tmp-file nil)
+      (delete-file tmp-file)
+      (org-table-to-lisp))))
 
 ;; functions for evaluation of R code
 (defvar litorgy-R-buffer nil

+ 2 - 0
rorg.org

@@ -142,6 +142,8 @@ b <- 17
 a + b
 #+end_src
 
+: 26
+
 #+begin_src R
 hist(rgamma(20,3,3))
 #+end_src