diff --git a/litorgy/litorgy-R.el b/litorgy/litorgy-R.el index fa5173e52..4eb316a42 100644 --- a/litorgy/litorgy-R.el +++ b/litorgy/litorgy-R.el @@ -33,6 +33,23 @@ (litorgy-add-interpreter "R") +(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'." @@ -48,6 +65,28 @@ 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." + + ) + ;; functions for evaluation of R code (defvar litorgy-R-buffer nil "Holds the buffer for the current R process") diff --git a/rorg.org b/rorg.org index 38d57dc19..329217ab4 100644 --- a/rorg.org +++ b/rorg.org @@ -31,6 +31,27 @@ options (maybe more) This is now implemented see the example in the [[* silent evaluation][sandbox]] ** TODO insert 2-D R results as tables +everything is working but R and shell + +*** TODO shells + +*** TODO R + +This has already been tackled by Dan in [[file:existing_tools/org-R.el::defconst%20org%20R%20write%20org%20table%20def][org-R:check-dimensions]]. The +functions there should be useful in combination with [[http://cran.r-project.org/doc/manuals/R-data.html#Export-to-text-files][R-export-to-csv]] +as a means of converting multidimensional R objects to emacs lisp. + +It may be as simple as first checking if the data is multidimensional, +and then, if so using =write= to write the data out to a temporary +file from which emacs can read the data in using =org-table-import=. + +Looking into this further, is seems that there is no such thing as a +scalar in R [[http://tolstoy.newcastle.edu.au/R/help/03a/3733.html][R-scalar-vs-vector]]. In that light I am not sure how to +deal with trivial vectors (scalars) in R. I'm tempted to just treat +them as vectors, but then that would lead to a proliferation of +trivial 1-cell tables... + + ** TODO allow variable initialization from source blocks Currently it is possible to initialize a variable from an org-mode table with a block argument like =table=sandbox= (note that the