[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