[GRASS-user] log(0)-error in r.mapcalculator

Patrick S. patrick_GIS at gmx.ch
Fri Nov 9 02:17:04 PST 2012


Markus,

I understand your arguments, but "A" is the slope of r.slope.aspect and 
has floating point values as input for the formula. I just created a 
testcase to be able to report on the behavior in detail. As you can see 
below the results are truncated to integer as soon as I add a term to 
"A" before the devision, but it remains unclear to me why adding a 
float-value reduces the attributes to integer-level as well.

This is a somewhat tricky behavior as it is usual to add a small 
constant to all values to avoid log(0)-errors.

Patrick

####TESTING
#algorithm:
param<-list(amap="r_slope_perc", formula=##varies in testing-see 
below##", outfile="r_test_logit") ###formula has been replaced for each
execGRASS("r.mapcalculator", parameters=param, flags=c("overwrite"))
x_perc<-readRAST6("r_slope_perc")
x_log<-readRAST6("r_test_logit")
xperc<-x_perc$r_slope_perc
xlog<-x_log$r_test_logit

summary(xperc)
summary(xlog)

sum(xperclog(((A+1)/100)/(1-(A+1/100)))==0, na.rm=T)


###Testcase1: formula= log(((A/100)/(1-(A/100))
 > summary(xperc)
    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's
   0.000   3.162   8.602  13.540  18.440 229.800    9852
 > summary(xlog)
    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's
    -4.9    -3.1    -2.2    -2.2    -1.4     9.5  564240
 > sum(xperc==0, na.rm=T)
[1] 550958


###Testcase2: formula= log(((A+1)/100)/(1-(A+1/100)))
 > summary(xperc)
    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's
   0.000   3.162   8.602  13.540  18.440 229.800    9852
 > summary(xlog)
    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's
      -5      -5      -5      -4      -5      -3 5369270
 > sum(xperc==0, na.rm=T)
[1] 550958



###Testcase3: formula= log(((A+0.01)/100)/(1-(A+0.01/100)))
 > summary(xperc)
    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's
   0.000   3.162   8.602  13.540  18.440 229.800    9852
 > summary(xlog)
    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's
      -9      -9      -9      -8      -9      -4 5369270

 > sum(xperc==0, na.rm=T)
[1] 550958




On 11/09/2012 10:22 AM, Markus Metz wrote:
>
> The documentation is correct. The problem arose because
> ((A/100)/(1-(A/100)) returns an integer value if A is an integer, i.e.
> the truncation happened before log() is called.
>
> Markus M
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/grass-user/attachments/20121109/fec1c382/attachment-0001.html>


More information about the grass-user mailing list