*Please ignore the previous patch* This updated patch contains the correct documentation and commit message
Sorry about the mistake,
From 58cb8521d4d4b620b0c5210a9b7232f99f7c720c Mon Sep 17 00:00:00 2001 From: "Rainer M. Krug" <r.m.k...@gmail.com> Date: Mon, 6 Oct 2014 13:48:49 +0200 Subject: [PATCH] ob-R.el: Add package name to read.table call * lisp/ob-R.el: (ob-R-transfer-variable-table-with-header): Add package name to call of R function read.table (now utils::read.table). This clarifies the call as well as avoids 'could not find function' error in R under certain conditions. (ob-R-transfer-variable-table-without-header): Add package name to call of R function read.table (now utils::read.table). This clarifies the call as well as avoids 'could not find function' error in R under certain conditions. --- lisp/ob-R.el | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/lisp/ob-R.el b/lisp/ob-R.el index ea33031..0b24a64 100644 --- a/lisp/ob-R.el +++ b/lisp/ob-R.el @@ -101,7 +101,7 @@ this variable.") con <- textConnection( %S ) - res <- read.table( + res <- utils::read.table( con, header = %s, row.names = %s, @@ -112,14 +112,17 @@ this variable.") res })" "R code used to transfer a table defined as a variable from org to R. -This function is used when the table contains a header.") +This function is used when the table contains a header. The usage +of utils::read.table() ensures that the command read.table() can +be found even in circumstances when the utils package is not in +the search path from R.") (defconst ob-R-transfer-variable-table-without-header "%s <- local({ con <- textConnection( %S ) - res <- read.table( + res <- utils::read.table( con, header = %s, row.names = %s, @@ -132,7 +135,10 @@ This function is used when the table contains a header.") res })" "R code used to transfer a table defined as a variable from org to R. -This function is used when the table does not contain a header.") +This function is used when the table does not contain a +header. The usage of utils::read.table() ensures that the command +read.table() can be found even in circumstances when the utils +package is not in the search path from R.") (defun org-babel-expand-body:R (body params &optional graphics-file) "Expand BODY according to PARAMS, return the expanded body." -- 2.1.2
Rainer Rainer M Krug <rai...@krugs.de> writes: > "Charles C. Berry" <ccbe...@ucsd.edu> writes: > >> On Wed, 8 Oct 2014, Rainer M Krug wrote: >> >>> "Charles C. Berry" <ccbe...@ucsd.edu> writes: >>> >>>> On Wed, 8 Oct 2014, Rainer M Krug wrote: >>>> >>>>> "Charles C. Berry" <ccbe...@ucsd.edu> writes: >>>>> >>>>>> On Mon, 6 Oct 2014, Rainer M Krug wrote: >>>>>> >>>>>>> Hi >>>>>>> >>>>>>> The variable transfer of tables from org to R caused sometimes 'could >>>>>>> not find function "read.table"' errors (e.g. when the file was tangled >>>>>>> into a ./data directory which was loaded by the function >>>>>>> devtools::load_all("./")). This can easily be fixed by adding the >>>>>>> package >>>>>>> name to the call in R, i.e. replacing =read.table()= with >>>>>>> =utils::read.table()= which is done in this patch. >>>>>> >>>>>> It does fix that one case. >>>>>> >>>>>> But I wonder if that is the best way. >>>>>> >>>>>> The heart of the matter is that load_all eventually calls sys.source, >>>>>> which can be persnickety about finding objects on the search path. See >>>>>> ?sys.source. >>>>>> >>>>>> If the src block you tangle to ./data/ has any code that uses any >>>>>> other objects from utils, stats, datasets or whatever, you will be in >>>>>> the same pickle. >>>>> >>>>> Exactly - that is true. But it is the same when putting this in a >>>>> package (as far as I am aware). >>>>> >>>> >>>> Do you mean that putting `x <- rnorm(10)' into a data/*.R file will >>>> fail when you try to build and check? >>>> >>>> In fact, `R CMD build' will execute it and save the result as a >>>> data/*.rda file. And check will go through. >>>> >>>> devtools::load_all (calling load_data) fails to do that. Which is why >>>> I think this is a devtools issue. >>> >>> OK - point taken. But I still think that the =utils::read.table()= would >>> not hurt, rather make the variable transfer safer. >>> >> >> What you want to change is in a defconst. So, the user can override >> with a file-local version. >> >> So, making the change really is harmless. >> >> Maybe add a note to the docstring to say that using >> utils::read.table' assures that `read.table' always can be found just >> in case anyone ever asks. > > OK - done in attached patch. > > Rainer > From 1eadbf6b44b8fc2fa5af29ea483383e9d137d19e Mon Sep 17 00:00:00 2001 > From: "Rainer M. Krug" <r.m.k...@gmail.com> > Date: Mon, 6 Oct 2014 13:48:49 +0200 > Subject: [PATCH] ob-R.el: Add package name to read.table call > > * lisp/ob-R.el: > (ob-R-transfer-variable-table-with-header): Add package name to call > of R function read.table (now utils::read.table). This clarifies the > call as well as avoids 'could not find function' error in R under > certain conditions. > --- > lisp/ob-R.el | 9 ++++++--- > 1 file changed, 6 insertions(+), 3 deletions(-) > > diff --git a/lisp/ob-R.el b/lisp/ob-R.el > index ea33031..a64b647 100644 > --- a/lisp/ob-R.el > +++ b/lisp/ob-R.el > @@ -101,7 +101,7 @@ this variable.") > con <- textConnection( > %S > ) > - res <- read.table( > + res <- utils::read.table( > con, > header = %s, > row.names = %s, > @@ -112,14 +112,17 @@ this variable.") > res > })" > "R code used to transfer a table defined as a variable from org to R. > -This function is used when the table contains a header.") > +This function is used when the table contains a header. The usage > +of utils::read.table() ensures that the command read.table() can > +be found even in circumstances when the utils package is not in > +the search path from R.") > > (defconst ob-R-transfer-variable-table-without-header > "%s <- local({ > con <- textConnection( > %S > ) > - res <- read.table( > + res <- utils::read.table( > con, > header = %s, > row.names = %s, > -- > 2.1.2 > > >> >> Chuck >> >> -- Rainer M. Krug email: Rainer<at>krugs<dot>de PGP: 0x0F52F982
pgpGkgnZ1pErk.pgp
Description: PGP signature