Re: [O] [PATCH] Write org variables into own R environment
Aaron Ecay writes: > Hi Rainer, > > This patch looks very promising. (I have not had a chance to test the > implementation yet). Thanks - please let me know as soon as you tested it. > One issue might be the name of the “org” variable > – maybe this should instead be “.org” or “_org” to lessen the chance of > stomping on pre-existing variables named “org” in people’s code. Agreed here. .org would be a tricky solution, because it is hidden - advantage or disadvantage? Probably a disadvantage. I will rename it to "_org_variables_" which is likely to be unique. Do you think it would be worth to have a check along the lines of if(class(_org_variables_)!="environment") { stop("_org_variables_ is already defined ") } else { ... } or to make the name user definable? A different thing which I am using at the moment is to save the environment so that it can be easily distributed along the tangled code *if all variables are defined at the beginning and not per code block*. Another option I am thinking about is to provide the possibility to store not only variables, but also R function - useful? Effectively a kind of "R package light for org-mode"? > > Thanks (also for your previous patch for handling in graphics blocks), Pleasure - Thanks that they are useful. Rainer > > -- > Aaron Ecay > > -- Rainer M. Krug email: Rainerkrugsde PGP: 0x0F52F982 pgpuWbiisoAOa.pgp Description: PGP signature
Re: [O] [PATCH] Write org variables into own R environment
Hi Rainer, This patch looks very promising. (I have not had a chance to test the implementation yet). One issue might be the name of the “org” variable – maybe this should instead be “.org” or “_org” to lessen the chance of stomping on pre-existing variables named “org” in people’s code. Thanks (also for your previous patch for handling in graphics blocks), -- Aaron Ecay
Re: [O] [PATCH] Write org variables into own R environment instead of .GlobalEnv
Bastien writes: > Rainer M Krug writes: > >> OK - I'll let you know when I hear something. > > We should both hear about it. > > Please ping me if you don't hear anything in a month, > I'll then ask again to the FSF copyright clerk. I'll do - thanks. > > Also, the formatting of the Changelog entry is not correct, > please carefully read http://orgmode.org/worg/org-contribute.html OK - I will do so and re-send the patch. >>> >>> Thanks in advance! >> >> Patch is in a separate email - hope the commit message is better >> now. > > Looks good, thanks! Thanks, Rainer -- Rainer M. Krug email: Rainerkrugsde PGP: 0x0F52F982 pgpYuCv14UNjJ.pgp Description: PGP signature
Re: [O] [PATCH] Write org variables into own R environment instead of .GlobalEnv
Rainer M Krug writes: > OK - I'll let you know when I hear something. We should both hear about it. Please ping me if you don't hear anything in a month, I'll then ask again to the FSF copyright clerk. Also, the formatting of the Changelog entry is not correct, please carefully read http://orgmode.org/worg/org-contribute.html >>> >>> OK - I will do so and re-send the patch. >> >> Thanks in advance! > > Patch is in a separate email - hope the commit message is better > now. Looks good, thanks! -- Bastien
Re: [O] [PATCH] Write org variables into own R environment instead of .GlobalEnv
Bastien writes: > Hi Rainer, > > Rainer M Krug writes: > >> I mailed them on Tuesday, using the form >> [[http://orgmode.org/request-assign-future.txt]] but did not get a >> response. > > This usually take 4-6 weeks, so let's be patient. OK - I'll let you know when I hear something. > >>> Also, the formatting of the Changelog entry is not correct, >>> please carefully read http://orgmode.org/worg/org-contribute.html >> >> OK - I will do so and re-send the patch. > > Thanks in advance! Patch is in a separate email - hope the commit message is better now. Thanks, Rainer -- Rainer M. Krug email: Rainerkrugsde PGP: 0x0F52F982 pgpyFtFePcXIt.pgp Description: PGP signature
[O] [PATCH] 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) pgpAf1ZHzPo4K.pgp Description: PGP signature
Re: [O] [PATCH] Write org variables into own R environment instead of .GlobalEnv
Hi Rainer, Rainer M Krug writes: > I mailed them on Tuesday, using the form > [[http://orgmode.org/request-assign-future.txt]] but did not get a > response. This usually take 4-6 weeks, so let's be patient. >> Also, the formatting of the Changelog entry is not correct, >> please carefully read http://orgmode.org/worg/org-contribute.html > > OK - I will do so and re-send the patch. Thanks in advance! -- Bastien
Re: [O] [PATCH] Write org variables into own R environment instead of .GlobalEnv
Bastien writes: > Hi Rainer, > > did you sign the FSF papers? We need this before considering applying > the patch. I mailed them on Tuesday, using the form [[http://orgmode.org/request-assign-future.txt]] but did not get a response. > Also, the formatting of the Changelog entry is not correct, > please carefully read http://orgmode.org/worg/org-contribute.html OK - I will do so and re-send the patch. Cheers, Rainer > > Thanks, -- Rainer M. Krug email: Rainerkrugsde PGP: 0x0F52F982 pgpXaE6hAVcvB.pgp Description: PGP signature
Re: [O] [PATCH] Write org variables into own R environment instead of .GlobalEnv
Hi Rainer, did you sign the FSF papers? We need this before considering applying the patch. Also, the formatting of the Changelog entry is not correct, please carefully read http://orgmode.org/worg/org-contribute.html Thanks, -- Bastien
[O] [PATCH] Write org variables into own R environment instead of .GlobalEnv
* (org-babel-R-assign-elisp): replaced simple assignments of variables to variables in R with assignments into an environment called 'org' and lock these so that they can not be modified anymore. * (org-babel-expand-body:R): wrap the call of `org-babel-variable-assignments:R' into - detachment of org environment - creation of new environment org to delete the old environment - locking of the org environment to prevent adding of bindings - appending of environment to search path of R These patch implements the writing of org variables into a separate R environment and attaches it to the search path. This solves several not so nice issues: 1) The org variables are now grouped and can be seen via 'ls(org)' in R 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 | 47 +++ 1 file changed, 31 insertions(+), 16 deletions(-) diff --git a/lisp/ob-R.el b/lisp/ob-R.el index 62aa7f2..da2aea2 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,31 @@ 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) -- Rainer M. Krug email: RMKruggmailcom PGP: 0x0F52F982 pgp4BCq73wsCj.pgp Description: PGP signature