From spencer.graves at prodsyse.com  Tue May 21 21:21:04 2013
From: spencer.graves at prodsyse.com (Spencer Graves)
Date: Tue, 21 May 2013 12:21:04 -0700
Subject: [Rd] Objects created by more than one data call?
In-Reply-To: <519B9AD1.1000406@stats.ox.ac.uk>
References: <519AADE9.2000505@structuremonitoring.com>
	<519B01D7.4060804@stats.ox.ac.uk> <519B848A.3020305@prodsyse.com>
	<519B88FB.2020706@stats.ox.ac.uk> <519B97EA.2060003@prodsyse.com>
	<519B9AD1.1000406@stats.ox.ac.uk>
Message-ID: <519BC920.1070005@prodsyse.com>

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
>
>



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