Skip to content

[R-pkg-devel] RData files with identical objects in package

9 messages · Duncan Murdoch, Michael Dewey, Troels Ring +1 more

#
Dear friends - I have a package under creation making heavy calculations on
chemical/clinical data and I plan to include as "examples" the use of some
literature data used in my papers. To illustrate what then occurs, I made
two RData files consisting only of x and y with different values for x and y
like 

X <- 100

Y <- 1000

save(x,y,file="first.RData")

and then a new x and y in "second" with x <- 45 and y <- 32

When I put these in a "data" directory of a new package without further ado
in RStudio

Ctrl-shift-L

Ctrl-shift-B

 

.there is a warning

* installing *source* package 'try' ...

** R

** data

*** moving datasets to lazyload DB

warning: objects 'x', 'y' are created by more than one data call

** byte-compile and prepare package for lazy loading

** help

  converting help for package 'try'

*** installing help indices

    finding HTML links ...    hello                                   html  

 done

 

Now, when I clear the workspace:
character(0)
Loading try
 
Restarting R session...
character(0)
[1] 45
[1] 45

 

x is still present - and y 

 

I have been reading and searching in "Writing R extensions" but so far
didn't find the clue.

Seemingly it is the file with the last name that is assessed - when I rename
first.RData to "xfile.RData" we get 100 and 1000.

Now and then when running ctrl-shift-L and - B we see

 

Attaches package: 'try'
 
The following objects are masked _by_ '.GlobalEnv':
x, y

 

Sorry for these problems - 

BW
Troels
#
On 13/01/2019 3:38 a.m., Troels Ring wrote:
Does that every happen when ls() returns character(0)?  It seems likely 
that you have copies of them in the global workspace, and the message is 
correct.

In the earlier situation (ls() *does* return character(0), but x is 
still found), you can find where it was found using

getAnywhere("x")

For example,

 > x <- 2
 > getAnywhere("x")
A single object matching ?x? was found
It was found in the following places
   .GlobalEnv
with value

[1] 2

Duncan Murdoch
#
Dear Troels

Perhaps I misunderstand what you are trying to do but would it be 
possible to put each x and y into a list or a dataframe with different 
names and then modify your usgae to pull them from there? Then there 
would be no danger of users getting the wrong x and y

Michael
On 13/01/2019 08:38, Troels Ring wrote:

  
    
  
#
Thanks a lot - here's is what I get:

A single object matching ?x? was found
It was found in the following places
  package:try
with value

[1] 100

Now put in the last "xfile.RData" - and
"afile.RData" is still muted

Restarting R session...
[1] 100
A single object matching ?x? was found
It was found in the following places
  package:try
with value

[1] 100
[1] 100

Whereas we know x in afile.RData is 45

So something is very wrong
Sorry to be so helpless
BW
Troels

-----Oprindelig meddelelse-----
Fra: Duncan Murdoch <murdoch.duncan at gmail.com> 
Sendt: 13. januar 2019 12:46
Til: Troels Ring <tring at gvdnet.dk>; package-develop <r-package-devel at r-project.org>
Emne: Re: [R-pkg-devel] RData files with identical objects in package
On 13/01/2019 3:38 a.m., Troels Ring wrote:
Does that every happen when ls() returns character(0)?  It seems likely 
that you have copies of them in the global workspace, and the message is 
correct.

In the earlier situation (ls() *does* return character(0), but x is 
still found), you can find where it was found using

getAnywhere("x")

For example,

 > x <- 2
 > getAnywhere("x")
A single object matching ?x? was found
It was found in the following places
   .GlobalEnv
with value

[1] 2

Duncan Murdoch
#
Thanks a lot - I'm sure you are right that I could just use different names but I cannot understand why it could cause problem to have two different well formated .RData files in the /data directory both with an "x" - is that really illegal? I cannot see it stated in the official munual - but it is long (wrting r extensions)
-BW
Troels

-----Oprindelig meddelelse-----
Fra: Michael Dewey <lists at dewey.myzen.co.uk> 
Sendt: 13. januar 2019 12:56
Til: Troels Ring <tring at gvdnet.dk>; package-develop <r-package-devel at r-project.org>
Emne: Re: [R-pkg-devel] RData files with identical objects in package

Dear Troels

Perhaps I misunderstand what you are trying to do but would it be possible to put each x and y into a list or a dataframe with different names and then modify your usgae to pull them from there? Then there would be no danger of users getting the wrong x and y

Michael
On 13/01/2019 08:38, Troels Ring wrote:

  
    
  
#
I think it is illegal if you use the lazyload database, because that is indexed by name and contains every object that would be created by data(). This creates an obvious issue if two objects share a name. 

Once you use the lazyload database, loading the package creates an environment which is initially full of promises, one for each object. Evaluating one of these makes the actual object appear in the environment. 

Using data() causes the corresponding promise(s) to be created in the global environment. IIRC, there is a registry that says which objects are created by which arguments to data(), but as they are still taken from the lazydata database, the last one created with a given name still wins.

-ps

  
    
#
Thank you so much! Perhaps it could be mentioned in the official
documentation on writing R extensions - even if - if I can read English -
the 
default is to avoid "lazyData" loading - and "laxyData" loading is in some
opposition to loading using data() - whereas - if we use RStudio, and make
an R documentation file for data, we have it ending with:
\examples{
data(ddd)
## maybe str(ddd) ; plot(ddd) ...
}
\keyword{datasets}

At the same time as "lazyData" is used default in DESCRIPTION ?

1.1.6 Data in packages
The data subdirectory is for data files, either to be made available via
lazy-loading or for loading using data(). (The choice is made by the
'LazyData' field in the DESCRIPTION file: the default is not to do so.) It
should not be used for other data files needed by the package, and the
convention has grown up to use directory inst/extdata for such files.

All best wishes
Troels


-----Oprindelig meddelelse-----
Fra: peter dalgaard <pdalgd at gmail.com> 
Sendt: 13. januar 2019 22:00
Til: Troels Ring <tring at gvdnet.dk>
Cc: Michael Dewey <lists at dewey.myzen.co.uk>; package-develop
<r-package-devel at r-project.org>
Emne: Re: [R-pkg-devel] RData files with identical objects in package

I think it is illegal if you use the lazyload database, because that is
indexed by name and contains every object that would be created by data().
This creates an obvious issue if two objects share a name. 

Once you use the lazyload database, loading the package creates an
environment which is initially full of promises, one for each object.
Evaluating one of these makes the actual object appear in the environment. 

Using data() causes the corresponding promise(s) to be created in the global
environment. IIRC, there is a registry that says which objects are created
by which arguments to data(), but as they are still taken from the lazydata
database, the last one created with a given name still wins.

-ps
html
--
Peter Dalgaard, Professor,
Center for Statistics, Copenhagen Business School Solbjerg Plads 3, 2000
Frederiksberg, Denmark
Phone: (+45)38153501
Office: A 4.23
Email: pd.mes at cbs.dk  Priv: PDalgd at gmail.com
#
There is (of course) a difference between what is the default for a (missing) field in DESCRIPTION and what shells like RStudio put into the field by default... 

I don't think there is a discrepancy between what is in the official documentation and what R and R CMD * actually does.

-pd

  
    
#
Thanks a lot - for my purpose right now I seem to prosper from not loading
lazy
All best
Troels

-----Oprindelig meddelelse-----
Fra: peter dalgaard <pdalgd at gmail.com> 
Sendt: 14. januar 2019 15:17
Til: Troels Ring <tring at gvdnet.dk>
Cc: Michael Dewey <lists at dewey.myzen.co.uk>; package-develop
<r-package-devel at r-project.org>
Emne: Re: [R-pkg-devel] RData files with identical objects in package

There is (of course) a difference between what is the default for a
(missing) field in DESCRIPTION and what shells like RStudio put into the
field by default... 

I don't think there is a discrepancy between what is in the official
documentation and what R and R CMD * actually does.

-pd
files.
data().
wins.
--
Peter Dalgaard, Professor,
Center for Statistics, Copenhagen Business School Solbjerg Plads 3, 2000
Frederiksberg, Denmark
Phone: (+45)38153501
Office: A 4.23
Email: pd.mes at cbs.dk  Priv: PDalgd at gmail.com