[R-sig-Geo] Cannot correctly assign Data type of upper left cell in ascii grid with writeRaster

Loïc Dutrieux loic.dutrieux at conabio.gob.mx
Wed May 17 16:34:32 CEST 2017


writeRaster() defaults to Float 8, regardless of the data type of your
input matrix. You can set it explicitly to write to integer by using the
datatype= argument.

writeRaster(r, "Test_writeRaster.asc",NAflag =-999,overwrite=T,
datatype='INT2S')

Cheers,
Loïc

On 17/05/2017 03:21, Michael Koehler wrote:
> Dear list,
> 
>  I encountered a problem when trying to write an Ascii-grid of integers
> with raster::writeRaster.
> When using that function, the upper left cell (only that cell!) in the
> resulting ascii grid will always
>  be a floating point number, even if I convert the whole raster to
> integers before.
> 
>  However, when I convert the raster to a SpatialPixelDataFrame and write
> the Ascii file with
>  maptools::writeAsciiGrid, the resulting upper left cell will be
> correctly saved as an integer.
> So Is this a bug or am I doing something wrong here?
> 
>  Here is a reproducible example:
> 
> library(raster)
> library(maptools)
> library(SDMTools)
> library(adehabitat)
> 
> # create raster
> 
> m <- matrix(c(-999,-999,-999,-999,-999,-999.999,-999.9,-999,1,6,
>               -999,-999,-999,7,1,6,7,2,6,3,
>               4,7,3,4,5,3,7,9,3,8,
>               9,3,6,8,3,4,7,3,7,8,
>               3,3,-999.999,7,5,3,2,8,9,8,
>               7,6,2,6,5,2,2,7,7,7,
>               4,7,2,5,7,7,7,3,3,5,
>               7,6,7,5,-999,6,5,2,3,2,
>               4,9,2,5,5,8,3,3,1,2,
>               5,2,6,5,1,5,3,7,7,2),nrow=10, ncol=10, byrow = T)
> 
> r <- raster(m)
> values(r)<-as.integer(values(r))
> 
> #------------------------------------------------------
> # write the raster and read the resulting file in again
> writeRaster(r, "Test_writeRaster.asc",NAflag =-999,overwrite=T)
> a<-read.table("Test_writeRaster.asc",stringsAsFactors = F)
> 
> a[7,] # upper left cell in the ascii file is a floating point number!
> 
> #------------------------------------------------------
> # convert, write with writeAsciiGrid and read the resulting file in again
> asc <- asc.from.raster(r) # convert to asc
> rasc <- asc2spixdf(asc)   # convert to SpatialPixelDataFrame
> 
> writeAsciiGrid(rasc,"Test_writeAsciiGrid.asc", na.value =-999)
> a<-read.table("Test_writeAsciiGrid.asc",stringsAsFactors = F)
> 
> a[7,] # upper left cell in the ascii file is a
> 
> # R version 3.2.5 (2016-04-14)
> # Platform: i386-w64-mingw32/i386 (32-bit)
> # Running under: Windows 7 x64 (build 7601) Service Pack 1
> #
> # 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
> #
> # loaded via a namespace (and not attached):
> # [1] tools_3.2.5
>



More information about the R-sig-Geo mailing list