[R-sig-Geo] Add +1 to current value of a cell in a raster in R

Ben Tupper btupper at bigelow.org
Mon Jul 11 01:54:57 CEST 2016


Hi,

Interesting.  How would you use the matrix approach to increment a particular cell more than once with a single subassignment?  If I repeat the upper left raster coord in the matrix 3 times it still yields a value of 1 up there.

library(raster)
r <- raster(nrows=5,ncols=5)
r[] <- 0
idx <- matrix(c(1,1,1,1,1,1,1,5,5,1,5,5),ncol=2,byrow=TRUE) 
r[idx] <- r[idx] + 1
plot(r)
range(getValues(r))
#[1] 0 1

I could be misreading the original posting, but I think the desire is that the result will be increment for each repeated index using just one subassignment.  

Cheers,
Ben


> On Jul 10, 2016, at 6:45 PM, Vijay Lulla <vijaylulla at gmail.com> wrote:
> 
> Maybe something like this?
> 
> R> r <- raster(nrows=5,ncols=5)
> R> r[] <- 0
> R> idx <- matrix(c(1,1,1,5,5,1,5,5),ncol=2,byrow=TRUE) # four corners of the raster!
> R> r[idx] <- r[idx] + 1
> R> image(r)
> 
> From R's ?`[` : When indexing arrays by '[' a single argument 'i' can be a matrix with as many columns as there are dimensions of 'x'; the result is then a vector with elements corresponding to the sets of indices in each row of 'i'.
> 
> 
> On Sun, Jul 10, 2016 at 5:59 PM, Ben Tupper <btupper at bigelow.org <mailto:btupper at bigelow.org>> wrote:
> Hi,
> 
> I stub my toe on this all the time (and wish I didn't).  The behavior isn't limited to raster - the replacement operator `[` in general doesn't update the left had side like my wild imagination might allow.  It's just a function and so it must make a copy of the input.
> 
> This note seen here ?`[` sort of points out the issue... "Subassignment is done sequentially, so if an index is specified more than once the latest assigned value for an index will result."  Between that, the phase of the moon and the pass-by-value stuff my brain starts to jumble.
> 
> On the other hand, if you have dependable indices and are simply incrementing you can leverage table() for your purpose.
> 
> x <- rep(0,5)
> i <- c(1,1,1,4)
> ti <- table(i)
> tindex <- as.numeric(names(ti))
> x[tindex] <- x[tindex] + ti
> 
> Likewise for raster
> 
> library(raster)
> r <- raster(ncol=5,nrow=5)
> r[] <- 0
> vec <- c(1,1,1,3,4,5,6,7,8,8,8,9)
> tvec <- table(vec)
> tindex <- as.integer(names(tvec))
> r[tindex] <- r[tindex] + tvec
> 
> I hope there are smarter/faster ways, but in the meantime it might speed things along for you.
> 
> 
> Ben
> 
> 
> > On Jul 10, 2016, at 3:34 PM, Giacomo May <Giacomo_May94 at gmx.de <mailto:Giacomo_May94 at gmx.de>> wrote:
> >
> > Dear R-users,
> > I am trying to add +1 to the cell value of certain cells in a raster. I have the cell numbers of the cells on which I'd like to perform said computation saved in a vector. I have a working code but with a large vector and raster it takes ages:
> >
> > r <- raster(ncol=5,nrow=5)
> > r[] <- 0
> > vec <- c(1,1,1,3,4,5,6,7,8,8,8,9)
> > for(i in 1:length(vec))
> > {
> > r[vec[i]] <- r[vec[i]] + 1
> > }
> >
> > I have already tried to use r[vec] <- r[vec] + 1 but that doesn't work properly, it just sets the values of the cells stored in the vector to 1. Does anybody know a faster way to do this ? Thanks in advance!
> >
> > _______________________________________________
> > R-sig-Geo mailing list
> > R-sig-Geo at r-project.org <mailto:R-sig-Geo at r-project.org>
> > https://stat.ethz.ch/mailman/listinfo/r-sig-geo <https://stat.ethz.ch/mailman/listinfo/r-sig-geo>
> 
> Ben Tupper
> Bigelow Laboratory for Ocean Sciences
> 60 Bigelow Drive, P.O. Box 380
> East Boothbay, Maine 04544
> http://www.bigelow.org <http://www.bigelow.org/>
> 
> Report Gulf of Maine jellyfish sightings to jellyfish at bigelow.org <mailto:jellyfish at bigelow.org> or tweet them to #MaineJellies -- include date, time, and location, as well as any descriptive information such as size or type.  Learn more at https://www.bigelow.org/research/srs/nick-record/nick-record-laboratory/mainejellies/ <https://www.bigelow.org/research/srs/nick-record/nick-record-laboratory/mainejellies/>
> 
> _______________________________________________
> R-sig-Geo mailing list
> R-sig-Geo at r-project.org <mailto:R-sig-Geo at r-project.org>
> https://stat.ethz.ch/mailman/listinfo/r-sig-geo <https://stat.ethz.ch/mailman/listinfo/r-sig-geo>
> 

Ben Tupper
Bigelow Laboratory for Ocean Sciences
60 Bigelow Drive, P.O. Box 380
East Boothbay, Maine 04544
http://www.bigelow.org

Report Gulf of Maine jellyfish sightings to jellyfish at bigelow.org or tweet them to #MaineJellies -- include date, time, and location, as well as any descriptive information such as size or type.  Learn more at https://www.bigelow.org/research/srs/nick-record/nick-record-laboratory/mainejellies/


	[[alternative HTML version deleted]]



More information about the R-sig-Geo mailing list