Dear Mr Harding,
Thank You very much for Your responsiveness.
>There would seem to be no clean general solution to this
>question. An important issue would be: What use do you
>want to put the result to?
I need this trick for the following task.
I am writing a function which has to determine the bounding box for a
spatial data set. The bounding box is a matrix(c(minLon minLat, maxLon, maxLat)).
I have the longitudes (lon) and latitudes (lat), and I have a resolution (r), for example
r = 0.004. The bounding box must have the same number of digits as resolution.
So I first have to truncate min(lon) and min(lat) to 3 decimal places,
then take the ceiling of max(lat)*10^3 and max(lon)*10^3 divided by 10^3. So I have the
maximal interval with resolution r for each variable (lat or lon). Then I have to determine
the number of cells in each direction, which I take as ceiling((maxLat-minLat)/r) and
ceiling((maxLon-minLon)/r). Here is an example of my code:
# get the first n digits from a number
truncf <- function(x, digits) {
# some control:
for(i in c("x", "digits")) if(!(is.numeric(get(i)) && length(get(i)) == 1)) stop(i, " in truncatef must be a numeric scalar!");
## make sure that digits is an integer:
if(as.integer(digits) - digits) stop("Please provide an integer digits to truncf!");
x <- trunc(x*10^digits)/10^digits;
x;
}
for(i in 0:5) if(!(resolution*10^i - as.integer(resolution*10^i))) break;
lonMin <- truncf(x=min(lon), digits=i); lonMax <- ceiling(x=max(lon)*10^i)/10^i;
latMin <- truncf(min(lat), digits=i); latMax <- ceiling(x=max(lat)*10^i)/10^i;
cells.dim <- ceiling(c(lonMax - lonMin, latMax - latMin)/resolution);
I hope this sheds more light on my issue.
Best regards,
Martin
-----------------------------------------------------------------
?????????? ??????????? ? ?????? ?? ??????????
http://www.sdi.bg/onlineInsurance/?utm_source=gbg&utm_medium=txtLink&utm_content=home
number of decimal places in a number?
3 messages · Martin Ivanov, Bert Gunter, S Ellison
An embedded and charset-unspecified text was scrubbed... Name: not available URL: <https://stat.ethz.ch/pipermail/r-help/attachments/20120707/7170b269/attachment.pl>
1 day later
-----Original Message----- From: Martin Ivanov I have the longitudes (lon) and latitudes (lat), and I have a resolution (r), for example r = 0.004. The bounding box must have the same number of digits as resolution.
Surely the issue is not the particular numeric resolution of the numbers but the idea that the bounding box limits should be integer multiples of the resolution?
Is that not accomplished more straightforwardly by things like
min <- resol * floor( min(lat)/resol )
max <- resol * ceil( max(lat)/resol )
?
S Ellison*******************************************************************
This email and any attachments are confidential. Any use...{{dropped:8}}