Hi, I'm upgrading one of my R packages to rely on the terra package instead of the raster package for the handling of spatial raster data. Previously when relying on the raster package I had to convert the data to a matrix and send it to C++ to loop through the cells manually, but with the new features in the terra package I can supply a C++ function that returns multiple values directly to terra::focalCpp to perform focal operations <https://desktop.arcgis.com/en/arcmap/10.3/tools/spatial-analyst-toolbox/how-focal-statistics-works.htm>. I get the same values using both the old and new versions of the functions, but the new version often causes the R session to abort, especially at larger window sizes. For example, a 3x3 or a 3x5 window seems to always run, but a 3x7 window will often cause the R session to abort. However, when it doesn't, I get the correct values. Functions followed by 2 are the terra versions of the function. By commenting out things and rebuilding I was able to determine the line that causes the crash in the terra version is "NumericMatrix curr_GLCM = C_make_glcm(curr_window, n_levels, shift, na_opt); //Tabulate the GLCM"; however, this line is also included in the raster version of the function so I'm not sure why this would happen. Any help would be greatly appreciated. Here is the github repository <https://github.com/ailich/GLCMTextures/tree/terra>, and I've added some sample code below to illustrate the issue.
Thanks, Alex install.packages('raster', repos='https://rspatial.r-universe.dev') #install development version of raster install.packages('terra', repos='https://rspatial.r-universe.dev') #install development version of terra remotes::install_github("ailich/GLCMTextures", ref = "terra") #Install branch of my package testing terra versions of functions library(terra) library(raster) library(GLCMTextures) r1a<- raster::raster(volcano) r2a<- glcm_textures(r1a, w=c(3,7), n_levels = 16, quantization = "equal prob", shift=c(0,1)) r1b<- terra::rast(volcano) r2b<- glcm_textures2(r1b, w=c(3,7), n_levels = 16, quantization = "equal prob", shift=c(0,1)) #Often leads to Rsession Aborted all.equal(values(r2a),values(r2b)) #TRUE #System Information #OS: Windows 10 R.version # platform x86_64-w64-mingw32 # arch x86_64 # os mingw32 # system x86_64, mingw32 # status # major 4 # minor 0.4 # year 2021 # month 02 # day 15 # svn rev 80002 # language R # version.string R version 4.0.4 (2021-02-15) # nickname Lost Library Book packageVersion("terra") # ‘1.5.2’ packageVersion("raster") # ‘3.5.10’ packageVersion("Rcpp") # ‘1.0.7’ packageVersion("RcppArmadillo") # ‘0.10.7.3.0’
_______________________________________________ Rcpp-devel mailing list Rcpp-devel@lists.r-forge.r-project.org https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel