Re: [Rd] S4 objects in the data directory

From: Prof Brian Ripley <ripley_at_stats.ox.ac.uk>
Date: Thu, 12 Nov 2009 10:54:46 +0000 (GMT)

On Thu, 12 Nov 2009, Robin Hankin wrote:

> Hi
>
> [R-2.10.0; suse linux]
>
> I am having difficulty creating S4 objects in the data directory of a
> package. I want
> to create a bunch of simple S4 objects for use in the examples section of the
> Rd files.
>
> It says in R-exts that:
>
> " R code should be “self-sufficient” and not make use of extra functionality
> provided by the package, so that the data file can also be used without
> having to load the package"
>
> My current minimal self-contained example follows.
>
> le112:~% cat ./anRpackage/R/f.R
> setClass("foo", representation=representation(x="numeric"))
>
> le112:~% cat ./anRpackage/data/toy_foo.R
> "toy_foo" <- new("foo",x=rep(2,7))
>
> fails R CMD check (transcript below)
>
> It fails because the class isn't defined. I can
> add 'require(anRpackage)' to the toy_foo.R
> but I'm not sure if this is consistent with the above
> advice in R-exts (and it
> fails R CMD check anyway).

It isn't consistent.

> What is best practice for creating a package with
> "toy" S4 objects for use in the examples section
> of the Rd files?

Why not do this either in the examples section, or in a make_data_for_examples() function in the package?

I see the data() mechanism as having been largely superseded by lazy-loading. It was primarily a way to avoid having large datasets always loaded (and taking up memory and gc() time). It is sometimes convenient to load a dataset from a package without loading that package: see the help for 'alias' and 'logLik' for example, but if you don't need that possibility (and it seems that in your case it is not available to you) you might as well have the object lazy-loaded in the package or accessed by an accessor function in the package.

>
>
> cheers
>
>
> Robin
>
>
>
>
>
>
>
>
> le112:~% R CMD check ./anRpackage
> * checking for working pdflatex ... OK
>
> [snip]
>
> * checking data for non-ASCII characters ... NOTE
> Error: "foo" is not a defined class
> Call sequence:
> 8: stop(gettextf("\"%s\" is not a defined class", Class), domain = NA)
> 7: getClass(Class, where = topenv(parent.frame()))
> 6: new("foo", x = rep(2, 7))
> 5: eval(expr, envir, enclos)
> 4: eval(i, envir)
> 3: sys.source(zfile, chdir = TRUE, envir = envir)
> 2: switch(ext, R = , r = {
> library("utils")
> sys.source(zfile, chdir = TRUE, envir = envir)
> }, RData = , rdata = , rda = load(zfile, envir = envir), TXT = ,
> txt = , tab = , tab.gz = , tab.bz2 = , tab.xz = , txt.gz = ,
> txt.bz2 = , txt.xz = assign(name, read.table(zfile, header = TRUE,
> as.is = FALSE), envir = envir), CSV = , csv = , csv.gz = ,
> csv.bz2 = , csv.xz = assign(name, read.table(zfile, header = TRUE,
> sep = ";", as.is = FALSE), envir = envir), found <- FALSE)
> 1: utils::data(list = f, package = character(0L), envir = dataEnv)
> Execution halted
> Portable packages use only ASCII characters in their datasets.
> * checking examples ...no parsed files found
> NONE
>
> WARNING: There were 2 warnings, see
> /home/rksh/anRpackage.Rcheck/00check.log
> for details
>
> le112:~%
>
>
>
> --
> Robin K. S. Hankin
> Uncertainty Analyst
> University of Cambridge
> 19 Silver Street
> Cambridge CB3 9EP
> 01223-764877
>
> ______________________________________________
> R-devel_at_r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>

-- 
Brian D. Ripley,                  ripley_at_stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595


______________________________________________ R-devel_at_r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel

Received on Thu 12 Nov 2009 - 10:58:48 GMT

This archive was generated by hypermail 2.2.0 : Thu 12 Nov 2009 - 14:10:27 GMT