On 09/02/2023 12:41 p.m., Alexandre Courtiol wrote:
Hi Igor,

I had the same issue using terra rather than sf a couple of weeks ago.

I thought of solving the issue as follow:

 1.

    store the shapefiles under extdata.

 2.

    create a function that loads the files:

.build_internal_files  <-  function() {
   ## This function should not be called by the user.
## It performs the lazy loading of the data since terra cannot handle rda files
   assign("CountryBorders",terra::vect(system.file("extdata/CountryBorders.shp",package  =  
"IsoriX")),envir  =  as.environment("package:IsoriX"))
   assign("OceanMask",terra::vect(system.file("extdata/OceanMask.shp",package  =  
"IsoriX")),envir  =  as.environment("package:IsoriX"))
}

 3. call that function automatically upon attach using |.onAttach()|:

.onAttach  <-  function(libname,pkgname) {
     .build_internal_files()## lazy loading of the internal data
}

It seems to work...

Note that .onAttach() is a standard way of defining a function that is recognised by R and ran when the package is attached.

Would these files ever be used when your package is not attached, e.g. through a function imported by a different package? If so, you should use .onLoad(), not .onAttach().

Duncan Murdoch


++

Alex


On Thu, 9 Feb 2023 at 11:11, Duncan Murdoch <murdoch.dun...@gmail.com <mailto:murdoch.dun...@gmail.com>> wrote:

    On 09/02/2023 3:56 a.m., Ivan Krylov wrote:
     > В Wed, 8 Feb 2023 11:32:36 -0300
     > Igor L <igorlal...@gmail.com <mailto:igorlal...@gmail.com>> пишет:
     >
     >> spatial_aisp <- sf::st_read('data-raw/shp_aisp/lm_aisp_2019.shp')
     >>
     >> plot(spatial_aisp) # works
     >>
     >> # Same data from .rda file after use usethis::use_data(spatial_aisp,
     >> overwrite = TRUE)
     >>
     >> x <- ispdata::spatial_aisp
     >>
     >> plot(x) # do not work
     >
     > Does this break in a new R session, but start working when you
    load the
     > sf namespace? I think that your package needs to depend on sf in
    order
     > for this to work. Specifying it in Imports may be enough to make the
     > plot.sf S3 method available to the user.

    Specifying a package in the Imports field of DESCRIPTION guarantees
    that
    it will be available to load, but doesn't load it.  Importing something
    from it via the NAMESPACE triggers a load, as does executing code like
    pkg::fn, or explicitly calling loadNamespace("pkg"), or loading a
    package that does one of these things.


     > You may encounter other problems if you go this way, like R CMD check
     > complaining that you don't use the package you're importing. Loading
     > the data from a file on demand would also load the sf namespace and
     > thus solve the problem.

    Workarounds for the check complaints are discussed here, among other
    places: https://stackoverflow.com/a/75384338/2554330
    <https://stackoverflow.com/a/75384338/2554330> .

    Duncan Murdoch

    ______________________________________________
    R-package-devel@r-project.org <mailto:R-package-devel@r-project.org>
    mailing list
    https://stat.ethz.ch/mailman/listinfo/r-package-devel
    <https://stat.ethz.ch/mailman/listinfo/r-package-devel>



--
Alexandre Courtiol, www.datazoogang.de <http://www.datazoogang.de>

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

Reply via email to