spGRASS6 issue
On Thu, 7 Feb 2013, Rainer M Krug wrote:
-----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.
I've commited some changes to the spgrass6 module of the rspatial project on R-forge (revision 1349), but not the conversion of strings to integer or numeric, which I think must be the users' responsibility, as failure is not an error but an NA. Please let me know if this helps. Maybe the statgrass list is a better forum? Roger
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-----
Roger Bivand Department of Economics, NHH Norwegian School of Economics, Helleveien 30, N-5045 Bergen, Norway. voice: +47 55 95 93 55; fax +47 55 95 95 43 e-mail: Roger.Bivand at nhh.no