[R-sig-Geo] spGRASS6 issue

Rainer M Krug r.m.krug at gmail.com
Thu Feb 7 10:09:17 CET 2013


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On 06/02/13 13:22, Rainer M Krug wrote:
> On 06/02/13 12:55, Roger Bivand wrote:
>> On Wed, 6 Feb 2013, R.S. Bhalla wrote:
> 
>>> Dear List, I have run into trouble with the execGRASS command copied below and can't
>>> figure out what I'm doing wrong. It runs fine without the size=11 argument (takes the
>>> default value of 3). Can
> 
>>> storage.mode(11)
>> [1] "double"
>>> is.integer(11)
>> [1] FALSE
>>> is.integer(11L)
>> [1] TRUE
> 
>> Just because it looks like an integer, it doesn't mean it is.
> 
> Hi Roger
> 
> this has bittan many users, including myself, as it is a little aux contraire to R, as here 11
> is acepted as integer in most circumstances.
> 
> Would it be possible to use a different check for integer e.g.
> 
> if(as.integer(x) == x) then {x <- as.integer(x)} else {ERROR}
> 
> I have the feeling that would be more in line with the treating in R of different numerical 
> storage modes.

Hi Roger,

To follow up:

in the function doGRASS, I would suggest to change:



 else if (pmv[i] == "integer") {
                  if (!is.integer(parameters[[i]]))
                    stop(paste("Parameter <", names(parameters)[i],
                      "> does not have integer value", sep = ""))
                }


to

 else if (pmv[i] == "integer") {
                  if (!(as.integer(parameters[[i]]==parameters[[i]])) {
                    stop(paste("Parameter <", names(parameters)[i],
                      "> does not have integer value", sep = ""))
                  } else {
                    parameters[[i]] <- as.integer(parameters[[i]]
                  }
                }

which will cause the error message when a not integer *value* has been submitted, irrespective of
the storage mode. If it is an integer value, the parameter[[i]] wil be stored as an integer.

A side effect would be that even "11" would be accepted, which is actually quite nice.

In addition, One could even add the same construct to the float test:

else if (pmv[i] == "float") {
                  if (!(as.numeric(parameters[[i]]==parameters[[i]])) {
                    stop(paste("Parameter <", names(parameters)[i],
                      "> does not have numeric value", sep = ""))
                  } else {
                    parameters[[i]] <- as.numeric(parameters[[i]]
                  }
                }


I also would suggest to change the error message for float from "not have a float value" to "does
not have a numeric value" as this is more consistent, as this would be more consistent with R
terminology.

Cheers,

Rainer


> 
> Cheers,
> 
> Rainer
> 
> 
> 
> 
>> Roger
> 
>>> someone please help. Thanks in advance, Ravi
>>> 
>>> Command: execGRASS("r.neighbors", parameters=list(input=patmap, output=n11map, 
>>> method="median", size=11), flags=c("overwrite", "c"))
>>> 
>>> Error: Error in doGRASS(cmd, flags = flags, ..., parameters = parameters, echoCmd =
>>> echoCmd) : Parameter <size> does not have integer value
>>> 
>>> 
> 
> 
> 

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)
Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/

iQEcBAEBAgAGBQJRE289AAoJENvXNx4PUvmC0kIIAIdCli9LydwiFyHCswPK8GZs
ravj05hOEQIQs6PgKAAJuF8F/ON16IlFiZ4sgTF9vHuRNTNiJOKCb4ajqwUSOGXb
n24k6sYFkR8v8aPZxVYtUSHB+LNaMTN1+skVvPJQwMp4+g5yguu2XIC8J1OsWX4b
fAqPuzOASyFci4J8G0yiqdtKy2FGSHzPP3hZrKwbaTXlgjjTxDswZv9Y8lykMWT8
tIYqX1qvFBoznFD/meiuYKFX/nv1ZwRRXNm+sa3lhDqPwjhv3zba7p603pzaLYfS
p4XmKx5/rI70PjJtqqfgeSgSw6CQAU5wDuOUhvQEW9uAiHPUuY7ryRAyjzOBFCs=
=rQ6u
-----END PGP SIGNATURE-----



More information about the R-sig-Geo mailing list