[R-pkg-devel] Problem with package containing spatial data

Igor L |gor|@|tu| @end|ng |rom gm@||@com
Thu Feb 9 20:04:21 CET 2023


Thank you all for your help.

Adam, I followed your suggestion, but I still can't figure out why the data
is only available locally when I run the devtools::load_all() function.

When I install the package from GitHub, the data does not appear (even
using the data() function).

Extdata: https://github.com/igorlaltuf/ispdata/tree/main/inst/extdata
Import: https://github.com/igorlaltuf/ispdata/blob/main/R/spatial_cisp.R

And is there any way to reduce the size of files in gpkg format? The
package increased from 5 to 10 megabytes. I tried to make it smaller with
the function sf::st_write("inst/extdata/spatial_aisp.gpkg", compress =
"deflate", append = F), but the size remained the same.

Thanks again for all the help.

Em qui., 9 de fev. de 2023 às 14:41, Alexandre Courtiol <
alexandre.courtiol using gmail.com> escreveu:

> 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"))
> }
>
>
>    1. 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.
>
> ++
>
> Alex
>
> On Thu, 9 Feb 2023 at 11:11, Duncan Murdoch <murdoch.duncan using gmail.com>
> wrote:
>
>> On 09/02/2023 3:56 a.m., Ivan Krylov wrote:
>> > В Wed, 8 Feb 2023 11:32:36 -0300
>> > Igor L <igorlaltuf using 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 .
>>
>> Duncan Murdoch
>>
>> ______________________________________________
>> R-package-devel using r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-package-devel
>>
>
>
> --
> Alexandre Courtiol, www.datazoogang.de
>

	[[alternative HTML version deleted]]



More information about the R-package-devel mailing list