[GRASS-user] resampling question
Dylan Beaudette
debeaudette at ucdavis.edu
Thu Oct 20 10:22:05 EDT 2011
On Thursday, October 20, 2011, Kirk Wythers wrote:
> I am curious how the r.resamp.stats function (when used to aggregate with
the "method=mode" switch) handles an equal number of different cell scores?
For example, lets say that aggregating 16 cells to 1cell yields 8 cells with a
value of 4, and 8 cells with a value of 5. In this case what would
r.resamp.stats report as the mode? And what method would it use to determine
that value?
The neat thing about GRASS and other OSS, you can always take a peak at the
source code. From my basic understanding of C, I don't think that there is
anything here that would accommodate ties-- so the result of
mode(4,4,4,4,5,5,5,5) would probably be 4 -- as it comes first. This is the
behavior in R when using something like which.max(table(x)).
Here is what I found in: lib/stats/c_mode.c
------------------------------------------------------------------------------------------
void c_mode(DCELL * result, DCELL * values, int n, const void *closure)
{
DCELL mode;
int max;
DCELL prev;
int count;
int i;
n = sort_cell(values, n);
max = 0;
count = 0;
for (i = 0; i < n; i++) {
if (max == 0 || values[i] != prev) {
prev = values[i];
count = 0;
}
count++;
if (count > max) {
max = count;
mode = prev;
}
}
if (max == 0)
Rast_set_d_null_value(result, 1);
else
*result = mode;
}
------------------------------------------------------------------------------------------
--
Dylan E. Beaudette
USDA-NRCS Soil Scientist
California Soil Resource Lab
http://casoilresource.lawr.ucdavis.edu/
More information about the grass-user
mailing list