Harmzy15 - 1 year ago 140
R Question

# Inverse Distance Weighting in R

Trying to interpolate a set of data using IDW. I am able to bring in the csv and convert it to a spatial points data frame. My column headings are lat and lon instead of x and y.

The coordinates are very minimal in distance due to the csv being representative of a farmers field. As a result the code believes that the minimum and maximum coordinates for x and y are the same because of the

`as.numeric`
dropping the decimal points and rounding the coordinates.
That is where the code errors out because when I try to run the
`expand.grid`
it sees no difference in
`x.range[1]`
and
`x.range[2]`
.

Does anyone see something that could be fixed? Is there a way to carry more decimal points in my coordinates to make sure there is the difference between
`x.range[1]`
and
`x.range[2]`
and similarly for
`y.range`
?

``````path<- setwd()

library(ggplot2)
library(gstat)
library(sp)
library(maptools)
#Checking rgeos availability: TRUE

#convert this basic data frame into a spatial points data frame
coordinates(nuclides) = ~ lon + lat

## Create a grid from the values in your points dataframe
## first get the range in data
x.range <- as.numeric(range(nuclides@coords[,1]))
y.range <- as.numeric(range(nuclides@coords[,2]))

nuclides.grd <- expand.grid(x = seq(from = x.range[1], to = x.range[2], by = 3.5), y = seq(from = y.range[1], to = y.range[2], by = 3.5))
#
# ## convert grid to SpatialPixel class
coordinates(nuclides.grd) <- ~ x+y
gridded(nuclides.grd) <- TRUE
#
``````

my
`x.range`
and
`y.range`
summaries are below

``````summary(x.range)
Min. 1st Qu.  Median    Mean 3rd Qu.    Max.
-80.65  -80.64  -80.64  -80.64  -80.64  -80.63
summary(y.range)
Min. 1st Qu.  Median    Mean 3rd Qu.    Max.
43.42   43.43   43.43   43.43   43.43   43.43
``````

So there is a difference but
`coordinates(nuclides.grd)`
gives me the error below stating its a single point, however there is a difference according to the summary
coordinates(nuclides.grd) <- ~ x+y
gridded(nuclides.grd) <- TRUE
Error in points2grid(points, tolerance, round) :
cannot derive grid parameters from a single point!

Well, based on your summaries the range of `x` is 0.02 and the range of `y` is 0.01. However, in your `expand.grid` call you ask for sequences from the min to the max with a step size of 3.5. So your `seq` calls will return 1 value each, and your `expand.grid` will be a single point.
I'd recommend replacing `by = 3.5` with `length.out = 10` in your `seq` calls. Then you'll get multiple values in the sequences and multiple points in our grid.
As a debugging technique, check your inputs! You said that the error was with `coordinates(nuclides.grd)` saying it's a single point. This is easy to verify! Check if `nuclides.grd` is a single point (yes, it is), so then look at where it's defined.