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

Vijay Lulla vijaylulla at gmail.com
Mon Jul 11 02:58:06 CEST 2016


OOPS!  I appear to have misunderstood the question then, Ben.  I'm unsure
how to increment a particular cell more than once.

Please pardon the noise.

On Sun, Jul 10, 2016 at 7:54 PM, Ben Tupper <btupper at bigelow.org> wrote:

> 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> 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> 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
>> > 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/
>>
>> _______________________________________________
>> R-sig-Geo mailing list
>> R-sig-Geo at r-project.org
>> 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