Seth,
I think I overlooked what is perhaps the easiest way to do this, using
a standard replacement approach:

library(raster)
r <- raster(system.file("external/test.grd", package="raster"))
p1a <- rep(100, ncol(r))
r[1:ncol(r)] <- p1a
r <- writeRaster(r, filename='test.rst', overwrite=TRUE)
plot(r)


Robert


On Wed, May 5, 2010 at 10:05 PM, Robert J. Hijmans <r.hijm...@gmail.com> wrote:
> Dear Seth,
>
> I think the problem is that you try to overwrite values in an existing
> file. That is not directly possible (with raster anyway). You have to
> start a new fil. Below are some examples. Also see
> vignette('functions', 'raster')
>
> #1 if you can read the whole raster into memory
> p1a <- rep(0, ncol(rout))
> rin <- raster(system.file("external/test.grd", package="raster"), values=TRUE)
> rin[1:ncol(rin)] = p1a
> rout <- writeRaster(rin, filename="write1.rst", 
> format="IDRISI",overwrite=TRUE)
>
> #2 row by row (and slow)
> rin <- raster(system.file("external/test.grd", package="raster"))
> rout <- raster(rin)
> p1a <- rep(0, ncol(rout))
> rout <- setValues(rout, p1a, 1)
> rout <- writeRaster(rout, filename="write2.rst", 
> format="IDRISI",overwrite=TRUE)
> for (r in 2:nrow(rout)) {
>        rin <- readRow(rin, r)
>        rout <-setValues(rout, values(rin), r)
>        rout <- writeRaster(rout, filename="write5.rst",
> format="IDRISI",overwrite=TRUE)
> }
>
>
> # 3 block by block (much faster); using the rgdal driver
> (format='RST') so that you
> # first copy all values and then overwrite rows at any location
> rin <- raster(system.file("external/test.grd", package="raster"))
> rout <- raster(rin)
> bs <- blockSize(rout)
> rout <- writeStart(rout, filename="write3.rst", format="RST", overwrite=TRUE)
> for (i in 1:bs$n) {
>        v = getValuesBlock(rin, row=bs$row[i], nrows=bs$size)
>        writeValues(rout, v, bs$row[i])
> }
> p1a <- rep(0, ncol(rout))
> writeValues(rout, p1a, 1) # replace a row
> rout <- writeStop(rout)
>
>
> Robert
>
>
>
> On Wed, May 5, 2010 at 6:52 PM, Seth J Myers <sjmy...@syr.edu> wrote:
>> Hi,
>>
>> I'm running R 2.11.0 on a 32 bit Windows Vista machine.  I have new versions 
>> of all relevant libraries installed.  I have been reading from IDRISI .rst 
>> files and this works fine using raster() and getValues().  I have passed the 
>> values from the .rst files through another R object and would like to write 
>> them as an .rst file.  In the following code, I am attempting to set the 1st 
>> row values of a RasterLayer object and then write these to a .rst file.  All 
>> raster files I am working with have 3,700 columns and 4,203 rows and are 
>> Connecticut StatePlane coordinate system which is equivalent to lambert's 
>> conformal conic proj.
>>
>> #extract 2nd column of a matrix which are the values of interest for the 1st 
>> row
>> p1a<-p1[c(1:3700),c(2)]
>> p1am<-as.matrix(p1a)
>> #create RasterLayer object from a .rst file that was created in IDRISI 
>> beforehand with all 0s (real nums) for cell values
>> put<-raster("C:\\rforest\\data\\rst85\\write2.rst",values=FALSE)
>> #set 1st row to equal the values of interest
>> put<-setValues(put,p1am,1)
>> #write to a .rst file that I created in IDRISI beforehand with all 0s (real 
>> nums)
>> writeRaster(put, filename="C:\\rforest\\data\\rst85\\write5.rst", 
>> format="IDRISI",overwrite=TRUE)
>>
>>
>> PROBLEM:
>>
>> Until the writeRaster function call, everything is working.  I can use 
>> getValues to look at the 1st row of "put", and this equals p1am values.  I 
>> can look at the 2nd row of "put" and they are all zeros.  The writeRaster 
>> function does not give an error but, when opened in IDRISI, the legend seems 
>> correct but the values are expressed in scientific notation and are MUCH too 
>> small.  Also, the 1st row values are copied for all rows, when I expect all 
>> but row=1 to be equal to 0.  I tried, prior to opening in IDRISI, to create 
>> a RasterLayer object from the output raster from writeRaster above, to see 
>> if R gives the result wanted.  This results in the following error message 
>> and report on the RasterLayer object created.
>>
>>> put2<-raster("C:\\rforest\\data\\rst85\\write5.rst",values=TRUE)
>>> put3<-getValues(put2,1)
>> Error:
>>        GDAL Error 3: Can't read(C:\rforest\data\rst85\write5.rst) block with 
>> X offset 0 and Y offset 0.
>> No error
>> Error in values(readRows(x, row, nrows)) :
>>  error in evaluating the argument 'x' in selecting a method for function 
>> 'values'
>>> put2
>> class       : RasterLayer
>> filename    : C:\rforest\data\rst85\write5.rst
>> nrow        : 4203
>> ncol        : 3700
>> ncell       : 15551100
>> min value   : 0
>> max value   : 0
>> projection  : +proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 
>> +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096 +y_0=152400.3048 
>> +ellps=GRS80 +datum=NAD83 +units=m +no_defs +towgs84=0,0,0
>> xmin        : 221895.5
>> xmax        : 334671.7
>> ymin        : 164342.4
>> ymax        : 292450.1
>> xres        : 30.48006
>> yres        : 30.48006
>>
>>
>> I have tried this entire process starting NOT with blank 0 rasters to create 
>> my SpatialLayer object (a shortcut I thought may be a problem) but instead 
>> creating rasters by specifying projections etc on non-used filenames.  The 
>> results are the same.
>>
>> Thanks,
>> Seth
>> _______________________________________________
>> R-sig-Geo mailing list
>> R-sig-Geo@stat.math.ethz.ch
>> https://stat.ethz.ch/mailman/listinfo/r-sig-geo
>>
>

_______________________________________________
R-sig-Geo mailing list
R-sig-Geo@stat.math.ethz.ch
https://stat.ethz.ch/mailman/listinfo/r-sig-geo

Reply via email to