Hi Attached please find seven patches for review to implement the storing of org variables in their own environment and to make the org-issued R code look nicer in the R session.
Thanks, Rainer -- Rainer M. Krug, PhD (Conservation Ecology, SUN), MSc (Conservation Biology, UCT), Dipl. Phys. (Germany) Centre of Excellence for Invasion Biology Stellenbosch University South Africa Tel : +33 - (0)9 53 10 27 44 Cell: +33 - (0)6 85 62 59 98 Fax : +33 - (0)9 58 10 27 44 Fax (D): +49 - (0)3 21 21 25 22 44 email: rai...@krugs.de Skype: RMkrug PGP: 0x0F52F982
From b1199e03758f42fde2f75f02a4c18cd71fac5a03 Mon Sep 17 00:00:00 2001 From: "Rainer M. Krug" <r.m.k...@gmail.com> Date: Thu, 20 Mar 2014 11:35:44 +0100 Subject: [PATCH 1/8] ob-R.el: Write org variables into own R environment * lisp/ob-R.el (org-babel-expand-body:R): Create empty environment called `org' in R before adding variables and afterwards lock it and add it to the R search path. (org-babel-variable-assignments:R): Assign variables into own `org' environment in R instead of .GlobalEnv These patch implements the writing of org variables into a separate R environment and attaches it to the search path. For the usage of these variables, nothing changes in R, but: 1) The org variables are now grouped and can be seen via `ls(org)' in R and are not shown anymore in the .GlobalEnv when using `ls()' 2) As the environment `org' and all bindings are locked, the variables can not be accidentally deleted. They can be overwritten, but they can be restored by simply deleting the variable in R or by using `org$VARIABLE' instead of `VARIABLE' 3) All variables can be saved by simply calling `save(org, FILENAME' in R which makes it possible to store all variable definitions for tangling in one file. --- lisp/ob-R.el | 25 +++++++++---------------- 1 file changed, 9 insertions(+), 16 deletions(-) diff --git a/lisp/ob-R.el b/lisp/ob-R.el index 62aa7f2..82971de 100644 --- a/lisp/ob-R.el +++ b/lisp/ob-R.el @@ -103,8 +103,12 @@ this variable.") (append (when (cdr (assoc :prologue params)) (list (cdr (assoc :prologue params)))) - (org-babel-variable-assignments:R params) - (list body) + '("try(detach(org), silent=TRUE)") + '("org <- new.env()") + (org-babel-variable-assignments:R params) + '("lockEnvironment(org)") + '("attach(org)") + (list body) (when (cdr (assoc :epilogue params)) (list (cdr (assoc :epilogue params))))))) (if graphics-file @@ -203,20 +207,9 @@ This function is called by `org-babel-execute-src-block'." "TRUE" "FALSE")) (row-names (if rownames-p "1" "NULL"))) (if (= max min) - (format "%s <- read.table(\"%s\", - header=%s, - row.names=%s, - sep=\"\\t\", - as.is=TRUE)" name file header row-names) - (format "%s <- read.table(\"%s\", - header=%s, - row.names=%s, - sep=\"\\t\", - as.is=TRUE, - fill=TRUE, - col.names = paste(\"V\", seq_len(%d), sep =\"\"))" - name file header row-names max)))) - (format "%s <- %s" name (org-babel-R-quote-tsv-field value)))) + (format "assign( '%s', read.table(\"%s\", header=%s, row.names=%s, sep=\"\\t\", as.is=TRUE ), envir = org ); lockBinding('%s', org)" name file header row-names name) + (format "assign( '%s', read.table(\"%s\", header=%s, row.names=%s, sep=\"\\t\", as.is=TRUE, fill=TRUE, col.names = paste(\"V\", seq_len(%d), sep =\"\") ), envir = org ); lockBinding('%s', org)" name file header row-names max name)))) + (format "assign('%s', %s, envir = org); lockBinding('%s', org)" name (org-babel-R-quote-tsv-field value) name))) (defvar ess-ask-for-ess-directory) ; dynamically scoped (defun org-babel-R-initiate-session (session params) -- 1.8.5.2 (Apple Git-48)
From 9b1aed4c855fd54caa7b91e316b26ef7a813b7b0 Mon Sep 17 00:00:00 2001 From: "Rainer M. Krug" <r.m.k...@gmail.com> Date: Wed, 26 Mar 2014 16:53:29 +0100 Subject: [PATCH 2/8] Add saving of org variable document * lisp/ob-R.el (org-babel-expand-body:R): add R command to save `org' environment after variables are stored and locked. --- lisp/ob-R.el | 1 + 1 file changed, 1 insertion(+) diff --git a/lisp/ob-R.el b/lisp/ob-R.el index 82971de..af90e68 100644 --- a/lisp/ob-R.el +++ b/lisp/ob-R.el @@ -108,6 +108,7 @@ this variable.") (org-babel-variable-assignments:R params) '("lockEnvironment(org)") '("attach(org)") + '("save(org, file='orgVARIABLES.RData')") (list body) (when (cdr (assoc :epilogue params)) (list (cdr (assoc :epilogue params))))))) -- 1.8.5.2 (Apple Git-48)
From 27a9daaf3b94c23b437d55c5d1e3d282139ced22 Mon Sep 17 00:00:00 2001 From: "Rainer M. Krug" <r.m.k...@gmail.com> Date: Wed, 26 Mar 2014 17:09:15 +0100 Subject: [PATCH 3/8] Change R environment name from org to org_variables_ --- lisp/ob-R.el | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/lisp/ob-R.el b/lisp/ob-R.el index af90e68..b51e582 100644 --- a/lisp/ob-R.el +++ b/lisp/ob-R.el @@ -103,12 +103,12 @@ this variable.") (append (when (cdr (assoc :prologue params)) (list (cdr (assoc :prologue params)))) - '("try(detach(org), silent=TRUE)") - '("org <- new.env()") + '("try(detach(org_variables_), silent=TRUE)") + '("org_variables_ <- new.env()") (org-babel-variable-assignments:R params) - '("lockEnvironment(org)") - '("attach(org)") - '("save(org, file='orgVARIABLES.RData')") + '("lockEnvironment(org_variables_)") + '("attach(org_variables_)") + '("save(org_variables_, file='org_variables.RData')") (list body) (when (cdr (assoc :epilogue params)) (list (cdr (assoc :epilogue params))))))) @@ -208,9 +208,9 @@ This function is called by `org-babel-execute-src-block'." "TRUE" "FALSE")) (row-names (if rownames-p "1" "NULL"))) (if (= max min) - (format "assign( '%s', read.table(\"%s\", header=%s, row.names=%s, sep=\"\\t\", as.is=TRUE ), envir = org ); lockBinding('%s', org)" name file header row-names name) - (format "assign( '%s', read.table(\"%s\", header=%s, row.names=%s, sep=\"\\t\", as.is=TRUE, fill=TRUE, col.names = paste(\"V\", seq_len(%d), sep =\"\") ), envir = org ); lockBinding('%s', org)" name file header row-names max name)))) - (format "assign('%s', %s, envir = org); lockBinding('%s', org)" name (org-babel-R-quote-tsv-field value) name))) + (format "assign( '%s', read.table(\"%s\", header=%s, row.names=%s, sep=\"\\t\", as.is=TRUE ), envir = org_variables_ ); lockBinding('%s', org_variables_)" name file header row-names name) + (format "assign( '%s', read.table(\"%s\", header=%s, row.names=%s, sep=\"\\t\", as.is=TRUE, fill=TRUE, col.names = paste(\"V\", seq_len(%d), sep =\"\") ), envir = org_variables_ ); lockBinding('%s', org_variables_)" name file header row-names max name)))) + (format "assign('%s', %s, envir = org_variables_); lockBinding('%s', org_variables_)" name (org-babel-R-quote-tsv-field value) name))) (defvar ess-ask-for-ess-directory) ; dynamically scoped (defun org-babel-R-initiate-session (session params) -- 1.8.5.2 (Apple Git-48)
From e8c977e0b38eb7eb64ed29f55bd985ca2e135c4c Mon Sep 17 00:00:00 2001 From: "Rainer M. Krug" <r.m.k...@gmail.com> Date: Fri, 28 Mar 2014 12:13:53 +0100 Subject: [PATCH 4/8] Rename `org_variables' to `.org_variables' * lisp/ob-R.el (org-babel-R-assign-elisp, org-babel-expand-body:R): Change name of R environment from `org_variables' to `.org_variables'. The `.' makes the environment hidden in R and it can not be directly deleted in R by using `rm(list=ls()' --- lisp/ob-R.el | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/lisp/ob-R.el b/lisp/ob-R.el index b51e582..214c14d 100644 --- a/lisp/ob-R.el +++ b/lisp/ob-R.el @@ -103,12 +103,12 @@ this variable.") (append (when (cdr (assoc :prologue params)) (list (cdr (assoc :prologue params)))) - '("try(detach(org_variables_), silent=TRUE)") - '("org_variables_ <- new.env()") + '("try(detach(.org_variables_), silent=TRUE)") + '(".org_variables_ <- new.env()") (org-babel-variable-assignments:R params) - '("lockEnvironment(org_variables_)") - '("attach(org_variables_)") - '("save(org_variables_, file='org_variables.RData')") + '("lockEnvironment(.org_variables_)") + '("attach(.org_variables_)") + '("save(.org_variables_, file='org_variables.RData')") (list body) (when (cdr (assoc :epilogue params)) (list (cdr (assoc :epilogue params))))))) @@ -208,9 +208,9 @@ This function is called by `org-babel-execute-src-block'." "TRUE" "FALSE")) (row-names (if rownames-p "1" "NULL"))) (if (= max min) - (format "assign( '%s', read.table(\"%s\", header=%s, row.names=%s, sep=\"\\t\", as.is=TRUE ), envir = org_variables_ ); lockBinding('%s', org_variables_)" name file header row-names name) - (format "assign( '%s', read.table(\"%s\", header=%s, row.names=%s, sep=\"\\t\", as.is=TRUE, fill=TRUE, col.names = paste(\"V\", seq_len(%d), sep =\"\") ), envir = org_variables_ ); lockBinding('%s', org_variables_)" name file header row-names max name)))) - (format "assign('%s', %s, envir = org_variables_); lockBinding('%s', org_variables_)" name (org-babel-R-quote-tsv-field value) name))) + (format "assign( '%s', read.table(\"%s\", header=%s, row.names=%s, sep=\"\\t\", as.is=TRUE ), envir = .org_variables_ ); lockBinding('%s', .org_variables_)" name file header row-names name) + (format "assign( '%s', read.table(\"%s\", header=%s, row.names=%s, sep=\"\\t\", as.is=TRUE, fill=TRUE, col.names = paste(\"V\", seq_len(%d), sep =\"\") ), envir = .org_variables_ ); lockBinding('%s', .org_variables_)" name file header row-names max name)))) + (format "assign('%s', %s, envir = .org_variables_); lockBinding('%s', .org_variables_)" name (org-babel-R-quote-tsv-field value) name))) (defvar ess-ask-for-ess-directory) ; dynamically scoped (defun org-babel-R-initiate-session (session params) -- 1.8.5.2 (Apple Git-48)
From ba532e45ba7fe373effbeef3781e744b33f532a4 Mon Sep 17 00:00:00 2001 From: "Rainer M. Krug" <r.m.k...@gmail.com> Date: Mon, 31 Mar 2014 16:57:14 +0200 Subject: [PATCH 5/8] Adds visual separators * ob-R.el (org-babel-expand-body:R): Add visual separators in R code to separate the automatically added code from the code from the code blocks. --- lisp/ob-R.el | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lisp/ob-R.el b/lisp/ob-R.el index 214c14d..3534580 100644 --- a/lisp/ob-R.el +++ b/lisp/ob-R.el @@ -103,12 +103,16 @@ this variable.") (append (when (cdr (assoc :prologue params)) (list (cdr (assoc :prologue params)))) + '("######################################################################") + '("## Beginning org variable transfer") '("try(detach(.org_variables_), silent=TRUE)") '(".org_variables_ <- new.env()") (org-babel-variable-assignments:R params) '("lockEnvironment(.org_variables_)") '("attach(.org_variables_)") '("save(.org_variables_, file='org_variables.RData')") + '("## end org variable transfer") + '("######################################################################") (list body) (when (cdr (assoc :epilogue params)) (list (cdr (assoc :epilogue params))))))) -- 1.8.5.2 (Apple Git-48)
From b3ddb3bf0bb327187acdd898a6173d22ceefe5fb Mon Sep 17 00:00:00 2001 From: "Rainer M. Krug" <r.m.k...@gmail.com> Date: Mon, 7 Apr 2014 10:52:00 +0200 Subject: [PATCH 6/8] Make R code look nicer in R * lisp/ob-R.el (org-babel-expand-body:R): Added Space to the R code blocks to make them easier identifiable in R. --- lisp/ob-R.el | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/lisp/ob-R.el b/lisp/ob-R.el index 3534580..5edbed9 100644 --- a/lisp/ob-R.el +++ b/lisp/ob-R.el @@ -105,12 +105,12 @@ this variable.") (list (cdr (assoc :prologue params)))) '("######################################################################") '("## Beginning org variable transfer") - '("try(detach(.org_variables_), silent=TRUE)") - '(".org_variables_ <- new.env()") + '(" try(detach(.org_variables_), silent=TRUE)") + '(" .org_variables_ <- new.env()") (org-babel-variable-assignments:R params) - '("lockEnvironment(.org_variables_)") - '("attach(.org_variables_)") - '("save(.org_variables_, file='org_variables.RData')") + '(" lockEnvironment(.org_variables_)") + '(" attach(.org_variables_)") + '(" save(.org_variables_, file='org_variables.RData')") '("## end org variable transfer") '("######################################################################") (list body) @@ -212,9 +212,9 @@ This function is called by `org-babel-execute-src-block'." "TRUE" "FALSE")) (row-names (if rownames-p "1" "NULL"))) (if (= max min) - (format "assign( '%s', read.table(\"%s\", header=%s, row.names=%s, sep=\"\\t\", as.is=TRUE ), envir = .org_variables_ ); lockBinding('%s', .org_variables_)" name file header row-names name) - (format "assign( '%s', read.table(\"%s\", header=%s, row.names=%s, sep=\"\\t\", as.is=TRUE, fill=TRUE, col.names = paste(\"V\", seq_len(%d), sep =\"\") ), envir = .org_variables_ ); lockBinding('%s', .org_variables_)" name file header row-names max name)))) - (format "assign('%s', %s, envir = .org_variables_); lockBinding('%s', .org_variables_)" name (org-babel-R-quote-tsv-field value) name))) + (format " assign( '%s', read.table(\"%s\", header=%s, row.names=%s, sep=\"\\t\", as.is=TRUE ), envir = .org_variables_ ); lockBinding('%s', .org_variables_)" name file header row-names name) + (format " assign( '%s', read.table(\"%s\", header=%s, row.names=%s, sep=\"\\t\", as.is=TRUE, fill=TRUE, col.names = paste(\"V\", seq_len(%d), sep =\"\") ), envir = .org_variables_ ); lockBinding('%s', .org_variables_)" name file header row-names max name)))) + (format " assign('%s', %s, envir = .org_variables_); lockBinding('%s', .org_variables_)" name (org-babel-R-quote-tsv-field value) name))) (defvar ess-ask-for-ess-directory) ; dynamically scoped (defun org-babel-R-initiate-session (session params) -- 1.8.5.2 (Apple Git-48)
pgpXvxHy6ZsKa.pgp
Description: PGP signature