forked from mirrors/org-mode
R is now using last output (with default session) and passing all tests
This commit is contained in:
parent
49db1e523c
commit
2a663b9e09
|
@ -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))
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue