[Rd] Objects created by more than one data call?

William Dunlap wdunlap at tibco.com
Wed May 22 00:03:40 CEST 2013


If you look at
   data(package="Ecat")$results[,"Item"]
you will see the items "Hstarts", "Hstarts (Intratesm)", and "Hstarts (Intratesq)"
which I think means that the dataset Hstarts is found in 3 .rda files, "Hstarts.rda",
"Intratesq.rda", and "Intratesm.rda".  There are duplicate, modulo (filename),
items for "MedExp" as well.

Bill Dunlap
Spotfire, TIBCO Software
wdunlap tibco.com


> -----Original Message-----
> From: r-devel-bounces at r-project.org [mailto:r-devel-bounces at r-project.org] On Behalf
> Of Spencer Graves
> Sent: Tuesday, May 21, 2013 12:21 PM
> To: Prof Brian Ripley
> Cc: r-devel at r-project.org
> Subject: Re: [Rd] Objects created by more than one data call?
> 
> On 5/21/2013 9:03 AM, Prof Brian Ripley wrote:
> > On 21/05/2013 16:51, Spencer Graves wrote:
> >> On 5/21/2013 7:47 AM, Prof Brian Ripley wrote:
> >>> On 21/05/2013 15:28, Spencer Graves wrote:
> >>>> On 5/20/2013 10:10 PM, Prof Brian Ripley wrote:
> >>>>> On 21/05/2013 00:12, Spencer Graves wrote:
> >>>>>> Hello, All:
> >>>>>>
> >>>>>>
> >>>>>>        If I use LazyData with the Ecdat package on R-Forge, "R CMD
> >>>>>> check" reports "no visible binding for global variable
> >>>>>> 'nonEnglishNames'", where 'nonEnglishNames' is a dataset in Ecdat
> >>>>>> used
> >>>>>> as the default argument for a function.  With LazyData, that NOTE
> >>>>>> disappears.  However, then I get, "Warning: objects 'Hstarts',
> >>>>>> 'Hstarts', 'MedExp' are created by more than one data call".
> >>>>>>
> >>>>>>
> >>>>>>        What do you suggest I do to fix this problem?
> >>>>>
> >>>>> Not create the objects in more than one data() call.
> >>>>>
> >>>>> Check what each of your data() calls produces.
> >>>>
> >>>>
> >>>>        Thanks.  How do I do that?
> >>>
> >>> Call data() on each in turn, and see what files get added to an empty
> >>> workspace.
> >>
> >>
> >> Like the following?
> >
> > You missed the 'empty'.  Look at tools:::data2LazyLoadDB to see how
> > this is checked.
> 
> 
>        Thanks for the suggestion.  Unfortunately, I tried that function,
> including stepping through it line by line, fixing references to other
> functions not exported from tools, without enlightenment;  see below.
> 
> 
>        Thanks again,
>        Spencer
> 
> 
>  > lib.loc = NULL
>  > package='Ecdat'
>  > pkgpath <- find.package(package, lib.loc, quiet = TRUE)
>  > pkgpath
> [1] "C:/Users/sgraves/pgms/R/R-3.0.0/library/Ecdat"
>  > dataDir <- file.path(pkgpath, "data")
>  > dataDir
> [1] "C:/Users/sgraves/pgms/R/R-3.0.0/library/Ecdat/data"
>  > enc <- tools:::.read_description(file.path(pkgpath,
> "DESCRIPTION"))["Encoding"]
>  > enc
> <NA>
>    NA
>  > if (!is.na(enc)) {
> +         op <- options(encoding = enc)
> +         on.exit(options(encoding = op[[1L]]))
> +     }
>  > file_test("-d", dataDir)
> [1] TRUE
>  > file.path(dataDir, "Rdata.rds")
> [1] "C:/Users/sgraves/pgms/R/R-3.0.0/library/Ecdat/data/Rdata.rds"
>  > (file.exists(file.path(dataDir, "Rdata.rds")) &&
> file.exists(file.path(dataDir,
> +             paste(package, "rdx", sep = "."))) &&
> file.exists(file.path(dataDir,
> +             paste(package, "rdb", sep = "."))))
> [1] FALSE
>  > file.exists(file.path(dataDir,
> +             paste(package, "rdx", sep = ".")))
> [1] FALSE
>  > file.path(dataDir,
> +             paste(package, "rdx", sep = "."))
> [1] "C:/Users/sgraves/pgms/R/R-3.0.0/library/Ecdat/data/Ecdat.rdx"
>  > dataEnv <- new.env(hash = TRUE)
>  > tmpEnv <- new.env()
>  > f0 <- files <- list_files_with_type(dataDir, "data")
> Error: could not find function "list_files_with_type"
>  > f0 <- files <- tools:::list_files_with_type(dataDir, "data")
>  > files <- unique(basename(file_path_sans_ext(files,
> +                 TRUE)))
> Error in basename(file_path_sans_ext(files, TRUE)) :
>    could not find function "file_path_sans_ext"
>  > files <- unique(basename(tools:::file_path_sans_ext(files,
> +                 TRUE)))
>  >             dlist <- vector("list", length(files))
>  > files
> character(0)
>  >  names(dlist) <- files
>  >             loaded <- character(0L)
>  > loaded
> character(0)
>  > for (f in files) {
> +                 utils::data(list = f, package = package, lib.loc =
> lib.loc,
> +                   envir = dataEnv)
> +                 utils::data(list = f, package = package, lib.loc =
> lib.loc,
> +                   envir = tmpEnv)
> +                 tmp <- ls(envir = tmpEnv, all.names = TRUE)
> +                 rm(list = tmp, envir = tmpEnv)
> +                 dlist[[f]] <- tmp
> +                 loaded <- c(loaded, tmp)
> +             }
>  >             dup <- duplicated(loaded)
>  > dup
> logical(0)
>  > if (any(dup))
> +                 warning(sprintf(ngettext(sum(dup), "object %s is
> created by more than one data call",
> +                   "objects %s are created by more than one data call"),
> +                   paste(sQuote(loaded[dup]), collapse = ", ")),
> +                   call. = FALSE, domain = NA)
>  >             if (length(loaded)) {
> +                 dbbase <- file.path(dataDir, "Rdata")
> +                 makeLazyLoadDB(dataEnv, dbbase, compress = compress)
> +                 saveRDS(dlist, file.path(dataDir, "Rdata.rds"),
> +                   compress = compress)
> +                 unlink(f0)
> +                 if (file.exists(file.path(dataDir, "filelist")))
> +                   unlink(file.path(dataDir, c("filelist", "Rdata.zip")))
> +             }
>  >
> 
> >
> >>
> >>
> >>  > library(Ecdat)
> >>  > objects()
> >> character(0)
> >>  > (data(Hstarts))
> >> [1] "Hstarts"
> >>  > (data(MedExp))
> >> [1] "MedExp"
> >>  > objects()
> >> [1] "Hstarts" "MedExp"
> >>  > sessionInfo()
> >> R version 3.0.0 (2013-04-03)
> >> Platform: i386-w64-mingw32/i386 (32-bit)
> >>
> >> locale:
> >> [1] LC_COLLATE=English_United States.1252
> >> [2] LC_CTYPE=English_United States.1252
> >> [3] LC_MONETARY=English_United States.1252
> >> [4] LC_NUMERIC=C
> >> [5] LC_TIME=English_United States.1252
> >>
> >> attached base packages:
> >> [1] stats     graphics  grDevices utils     datasets  methods base
> >>
> >> other attached packages:
> >> [1] Ecdat_0.2-3
> >>
> >> loaded via a namespace (and not attached):
> >> [1] tools_3.0.0
> >>
> >>
> >>        Thanks,
> >>        Spencer
> >>
> >>>
> >>>>        In the "man" directory, I just did "grep 'data(MedExp' *.Rd",
> >>>> which identified only "MedExp.Rd:\usage{data(MedExp)}"; "grep
> >>>> 'data(Hstarts *.Rd" similarly returned only
> >>>> "Hstarts.Rd:\usage(data(Hstarts)}".
> >>>>
> >>>>
> >>>>        Thanks again for the reply.
> >>>>        Spencer
> >>>>>
> >>>>>>
> >>>>>>        Thanks,
> >>>>>>        Spencer Graves
> >>>>>>
> >>>>>>
> >>>>>>  > sessionInfo()
> >>>>>> R version 3.0.0 (2013-04-03)
> >>>>>> Platform: i386-w64-mingw32/i386 (32-bit)
> >>>>>>
> >>>>>> locale:
> >>>>>> [1] LC_COLLATE=English_United States.1252
> >>>>>> [2] LC_CTYPE=English_United States.1252
> >>>>>> [3] LC_MONETARY=English_United States.1252
> >>>>>> [4] LC_NUMERIC=C
> >>>>>> [5] LC_TIME=English_United States.1252
> >>>>>>
> >>>>>> attached base packages:
> >>>>>> [1] stats     graphics  grDevices utils     datasets methods base
> >>>>>>
> >>>>>> other attached packages:
> >>>>>> [1] Ecdat_0.2-3
> >>>>>>
> >>>>>> loaded via a namespace (and not attached):
> >>>>>> [1] tools_3.0.0
> >>>>>>
> >>>>>> ______________________________________________
> >>>>>> R-devel at r-project.org mailing list
> >>>>>> https://stat.ethz.ch/mailman/listinfo/r-devel
> >
> >
> 
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel



More information about the R-devel mailing list