
blockSize
can be used to suggest chunks of a number of rows that can be much larger than 1 (up to all rows). This reduces the number of loops and the number of file i/o requests and hence could speed up writing values to file. These functions do not have many validity tests and will try to do as requested, or perhaps fail, or write invalid files. Hence the adviced to use writeRaster instead (or first, and later optimize with the functions described here).blockSize(x, chunksize, n=1, minblocks=2)
writeStart(x, filename, ...)
writeValues(x, v, ...)
writeStop(x)
rows
, the suggested row numbers at which to start the blocks for reading and writing, size
, the block size (number of rows) and n
, the total number of blocksformat
Character. Output file type. See writeFormats
datatype
Character. Output data type. See dataType
overwrite
Logical. If TRUE
, "filename" will be overwritten if it exists
}writeStart
, then write values to it in chunks. When writing is done close the file with writeStop
. chunkSize
can help set the number of rows of each chunk and it returns the row-numbers from where to start reading.
Files with a 'native' format must be written in sequence of cell numbers. In contrast, the values of files written via rgdal can be written in any order (but you must write 1 or more entire rows, you cannot write part of a row). For files written via rgdal, an argument start
must be provided to writeValues
so that it knows where to write the values. This argument is ignored for the native formats (values are assumed to be in sequence).writeRaster
r <- raster(system.file("external/test.grd", package="raster"))
# write to a new binary file in chunks
s <- raster(r)
#
tr <- blockSize(r, 25)
tr
s <- writeStart(s, filename='test.grd', overwrite=TRUE)
for (i in 1:tr$n) {
v <- getValuesBlock(r, row=tr$row[i], nrows=tr$size)
writeValues(s, v, tr$row[i])
}
s <- writeStop(s)
s2 <- writeStart(s, filename='test2.tif', format='GTiff', overwrite=TRUE)
# writing last row first
for (i in tr$n:1) {
v <- getValuesBlock(r, row=tr$row[i], nrows=tr$size)
writeValues(s2, v, tr$row[i])
}
# row number 5 once more
v <- getValuesBlock(r, row=5, nrows=1)
writeValues(s2, v, 5)
s2 <- writeStop(s2)
Run the code above in your browser using DataLab