Search code examples
rrasterr-sf

r Raster ".self$finalize" error causing failure


I've been using the following function to clip raster's by sf polygons for at least a year without any issues, but have started running into trouble with it since updating to R 4.0.3 and the recent rgdal updates. When I run clip the first time, I get an error stating x$.self$finalize())() and the function fails. After I run it again or reload the raster package it seems to work. This was previously raised with raster and sp. In this case the issue seems related, see below: I left the additional libraries which are normally loaded in the script in case they are relevant to the issue.

library(raster)
library(EBImage)
library(sf) 
library(stars)
library(reticulate)
library(fitdistrplus)
measure <- import("skimage.measure")
clip<-function(x,shape) {
  # Arguments:
  #   x: Input raster
  #   shape: polygon (in same projection)
  # Returns:
  #   clipped raster
  #######
  return(crop(mask(x, shape), shape))
}
## polygon w/ single feature
shoreline <- st_read("shoreline_FULL.shp")

## Load channel network mask
DCN <- raster("2000_07_channel_clean.tif")
DCNt <- t(as.matrix(DCN))

When then running clip:

> DCN <- clip(DCN, shoreline)
Error in (function (x)  : attempt to apply non-function
Called from: (function (x) 
x$.self$finalize())(<environment>)
Browse[1]> DCNt <- t(as.matrix(DCN))
Error during wrapup: no method for coercing this S4 class to a vector
Error: no more error handlers available (recursive errors?); invoking 'abort' restart
Browse[1]> 

Even more oddly, when I simply run the equivalent commands the error is returned but the result computes and now clip works. Tedious and I need to be able to source the entire script!

> test <- crop(mask(DCN, shoreline), shoreline)
Error in x$.self$finalize() : attempt to apply non-function
Error in x$.self$finalize() : attempt to apply non-function
Error in (function (x)  : attempt to apply non-function
> DCN <- clip(DCN, shoreline)
> 

The shapefile and raster used in the example can be found here: https://drive.google.com/drive/folders/1D_y_9vAA69CsA2nwJTw_hpfdjgZfqdRm?usp=sharing

And for reference:

> sessionInfo()
R version 4.0.3 (2020-10-10)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 19041)

Matrix products: default

locale:
[1] LC_COLLATE=English_United States.1252  LC_CTYPE=English_United States.1252   
[3] LC_MONETARY=English_United States.1252 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] fitdistrplus_1.1-1 survival_3.2-7     MASS_7.3-53       
 [5] reticulate_1.18    stars_0.4-3        abind_1.4-5        sf_0.9-6          
 [9] EBImage_4.31.0     raster_3.4-5       sp_1.4-4          

loaded via a namespace (and not attached):
 [1] Rcpp_1.0.5          locfit_1.5-9.4      lattice_0.20-41     deldir_0.1-29      
 [5] FNN_1.1.3           fftwtools_0.9-9     png_0.1-7           class_7.3-17       
 [9] zoo_1.8-8           gtools_3.8.2        digest_0.6.27       gstat_2.0-6        
[13] R6_2.4.1            tiff_0.1-5          R.matlab_3.6.2      pracma_2.2.9       
[17] coda_0.19-4         e1071_1.7-4         spam_2.5-1          pillar_1.4.6       
[21] rlang_0.4.8         spdep_1.1-5         rstudioapi_0.11     gdata_2.18.0       
[25] gmodels_2.18.1      R.utils_2.10.1      R.oo_1.24.0         Matrix_1.2-18      
[29] splines_4.0.3       rgdal_1.5-18        htmlwidgets_1.5.2   igraph_1.2.6       
[33] RCurl_1.98-1.2      compiler_4.0.3      pkgconfig_2.0.3     BiocGenerics_0.35.4
[37] htmltools_0.5.0     tidyselect_1.1.0    tibble_3.0.4        expm_0.999-5       
[41] intervals_0.15.2    codetools_0.2-16    spacetime_1.2-3     crayon_1.3.4       
[45] dplyr_1.0.2         rappdirs_0.3.1      bitops_1.0-6        R.methodsS3_1.8.1  
[49] grid_4.0.3          jsonlite_1.7.1      nlme_3.1-150        spData_0.3.8       
[53] lwgeom_0.2-5        lifecycle_0.2.0     DBI_1.1.0           magrittr_1.5       
[57] units_0.6-7         KernSmooth_2.23-17  LearnBayes_2.15.1   ellipsis_0.3.1     
[61] xts_0.12.1          generics_0.0.2      vctrs_0.3.4         boot_1.3-25        
[65] tools_4.0.3         glue_1.4.2          purrr_0.3.4         maps_3.3.0         
[69] fields_11.6         jpeg_0.1-8.1        parallel_4.0.3      classInt_0.4-3     
[73] dotCall64_1.0-0  

Solution

  • These annoying messages

    Error in x$.self$finalize() : attempt to apply non-function
    Error in (function (x)  : attempt to apply non-function
    

    Will disappear if you update the terra package to the current binary version on CRAN. If you compile yourself, make sure to also use the current version of Rcpp.