Harmzy15 - 1 year ago 104

R Question

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`

That is where the code errors out because when I try to run the

`expand.grid`

`x.range[1]`

`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]`

`x.range[2]`

`y.range`

`path<- setwd()`

library(ggplot2)

library(gstat)

library(sp)

library(maptools)

#Checking rgeos availability: TRUE

nuclides <- read.csv("fieldnuclides.csv")

#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`

`y.range`

`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)`

coordinates(nuclides.grd) <- ~ x+y

gridded(nuclides.grd) <- TRUE

Error in points2grid(points, tolerance, round) :

cannot derive grid parameters from a single point!

Answer Source

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.