R is now using last output (with default session) and passing all tests

This commit is contained in:
Eric Schulte 2009-06-03 15:59:27 -07:00
parent 49db1e523c
commit 2a663b9e09
2 changed files with 17 additions and 15 deletions

View file

@ -33,10 +33,6 @@
(org-babel-add-interpreter "R") (org-babel-add-interpreter "R")
(defvar org-babel-R-func-name "org_babel_R_main"
"This is the main function which wraps each R source code
block.")
(defun org-babel-execute:R (body params) (defun org-babel-execute:R (body params)
"Execute a block of R code with org-babel. This function is "Execute a block of R code with org-babel. This function is
called by `org-babel-execute-src-block'." called by `org-babel-execute-src-block'."
@ -46,9 +42,8 @@ called by `org-babel-execute-src-block'."
results) results)
(org-babel-R-initiate-R-buffer) (org-babel-R-initiate-R-buffer)
(mapc (lambda (pair) (org-babel-R-assign-elisp (car pair) (cdr pair))) vars) (mapc (lambda (pair) (org-babel-R-assign-elisp (car pair) (cdr pair))) vars)
(org-babel-R-input-command (org-babel-R-input-command body)
(format "%s <- function ()\n{\n%s\n}" org-babel-R-func-name body)) (org-babel-R-last-value-as-elisp))))
(org-babel-R-to-elisp org-babel-R-func-name))))
(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."
@ -74,13 +69,12 @@ R process in `org-babel-R-buffer'."
name transition-file (if has-header "TRUE" "FALSE"))) name transition-file (if has-header "TRUE" "FALSE")))
(format "%s <- %s" name (org-babel-R-quote-tsv-field value))))) (format "%s <- %s" name (org-babel-R-quote-tsv-field value)))))
(defun org-babel-R-to-elisp (func-name) (defun org-babel-R-last-value-as-elisp ()
"Return the result of calling the function named FUNC-NAME in "Return the last value returned by R as Emacs lisp."
`org-babel-R-buffer' as Emacs lisp."
(let ((tmp-file (make-temp-file "org-babel-R")) result) (let ((tmp-file (make-temp-file "org-babel-R")) result)
(org-babel-R-input-command (org-babel-R-input-command
(format "write.table(%s(), file=\"%s\", sep=\"\\t\", na=\"nil\",row.names=FALSE, col.names=FALSE, quote=FALSE)" (format "write.table(.Last.value, file=\"%s\", sep=\"\\t\", na=\"nil\",row.names=FALSE, col.names=FALSE, quote=FALSE)"
func-name tmp-file)) tmp-file))
(with-temp-buffer (with-temp-buffer
(condition-case nil (condition-case nil
(progn (progn
@ -88,9 +82,8 @@ R process in `org-babel-R-buffer'."
(delete-file tmp-file) (delete-file tmp-file)
(setq result (mapcar (lambda (row) (setq result (mapcar (lambda (row)
(mapcar #'org-babel-R-read row)) (mapcar #'org-babel-R-read row))
(org-table-to-lisp))) (org-table-to-lisp))))
;; (setq result (org-babel-R-set-header-row result))
)
(error nil)) (error nil))
(if (null (cdr result)) ;; if result is trivial vector, then scalarize it (if (null (cdr result)) ;; if result is trivial vector, then scalarize it
(if (consp (car result)) (if (consp (car result))

View file

@ -341,6 +341,15 @@ this will involve...
3) functions for retrieving results from the *sessions* buffers which 3) functions for retrieving results from the *sessions* buffers which
can be overridden by each source code can be overridden by each source code
**** R
#+srcname: task-R-with-inf-process-buffer
#+begin_src R
a <- 8
b <- 9
a + b
#+end_src
*** TODO implement a *session* header argument *** TODO implement a *session* header argument
use this header argument to override the default *session* buffer use this header argument to override the default *session* buffer