[R-sig-Geo] Question re: Intamap package / Interpolate method: Inputs NOT both Spatial Points Data Frame?

Edzer Pebesma edzer.pebesma at uni-muenster.de
Tue Oct 26 22:57:31 CEST 2010


Thanks for pointing out that packages intamap and raster make
incompatible assumptions about the function (in raster: method)
interpolate. Sth we need to sort out.

In your script, you assign

gddThisYear$value <- gddThisYear[,jCtr]

it is too bad that this does not give a warning or error, apparently one
can assign S4 objects to data.frame columns -- it might even be
documented behaviour.

anyway, check the class of gddThisYear[,jCtr] yourself and try instead

gddThisYear$value <- gddThisYear[[jCtr]]

Hth,

On 10/26/2010 10:43 PM, Rick Reeves wrote:
> Hello Edzer:
> 
> (by the way, I am using R 2.12)
> 
> Yes, I had - BUT - I rechecked my script, and the 'interpolate' method
> in intamap was apparently MASKED
> by the 'interpolate' method in the subsequently loaded raster package.
> (in-progress code is below...)
> 
> I canceled the loading of the raster package, and re-ran the script with
> better results. This time,
> the line:
> 
>   interpImage <- interpolate(gddThisYear,monarchStaLocs,list(mean=TRUE,
> variance=TRUE))
> 
> results in:
> -------------------------------------------------
> R 2010-10-26 13:31:48 interpolating 133 observations, 94 prediction
> locations
> [1] "estimated time for  copula 60.5284609039258"
> Error in min(dataObs) : invalid 'type' (S4) of argument
> In addition: Warning message:
> In predictTime(nObs = dim(observations)[1], nPred =
> dim(coordinates(predictionLocations))[1],  :
> 
>  using standard model for estimating time. For better
>  platform spesific predictions, please run
>  timeModels <- generateTimeModels()
>   and save the workspace
> ------------------------------------------------
> So intamap::interpolate documentation matches the argument list. But, my
> script is still not correct.
> 
> I suspect that this error happens because I do not fully understand how
> to use 'interpolate' for this task.
> 
> My task could also be solved by an approach like that demonstrated in
> Dylan Beaudette's excellent example at:
> 
> http://casoilresource.lawr.ucdavis.edu/drupal/node/442
> 
> .. but using intamap::interpolate would be much simpler if I have made
> the correct assumptions.
> 
> What are your thoughts?
> 
> Thanks,
> Rick R
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> ##############################################################################################################
> 
> 
> interpGddData <- function()
> {
> #   require(gstat)
>    require(intamap)
> #   require(rgdal)
>    require(maptools)
> #   require(raster)
> 
>    setwd("v:/MigrationDynamics/NCEAS PROCESS")
> 
>    firstGddCol <- 5
> 
> #   setwd("/data/scientist_share/scientist/MigrationDynamics/NCEAS
> PROCESS")
> 
>    gddTable <- readShapePoints("OhioGDDStationsGP.shp")
>    monarchStaLocs <- readShapePoints("OH_Locations.shp")
> 
>    numGddCols <- 1 + (ncol(gddTable) - firstGddCol)
> 
> # The Idea: For each sampling year, generate one map for each GDD
> parameter.
> # Each map is an interpolated 'surface' from all of the GDD-calculated
> 'station'
> # locations in the input file.
> 
>    theYears <- unique(gddTable at data$YR)
>    numYears <- length(theYears)
> 
>    for (curYear in theYears)
>    {
>       gddThisYear <- gddTable[which(gddTable at data$YR==curYear),] # table
> entries: all stations, current year
> 
>    # make input table copy to append with interpolated GDD values for
> current year
> 
>       monarchStasWithGDD <- gddThisYear
> 
> # Write one output ESRI Shape File for each year, containing the Monarch
> station
> # location points with all of the interpolated GDD parameters for the
> current year appended.
> 
>       outFileName <- sprintf("OH_MonarchSta_GDD_%d.tif",curYear)
> #      theBase <- [,1:(firstGddColumn-1)]
> 
> # Create one interpolated image for each parameter, resulting in a named
> matrix file.
> 
>       for (jCtr in firstGddCol : numGddCols)
>       {
> #         fieldName <- names(gddThisYear)[jCtr] # we need this for the
> fileName
> #         fileName <- sprintf("%s_%d.tif",fieldName,curYear)
> 
>          gddThisYear$value <- gddThisYear[,jCtr]
> 
> # Note: gddThisYear needs to be upgraded to a spatialPixelsDataFrame  so
> that it is a grid
> # Despite documentation, A SpatialPointsDataFrame object is not a valid
> input.
> # first argument(spatialPoints): measurement locations (in our case, the
> GDD values)
> # second argument(spatialPixels): where to place the interpolated grid
> of measurement values.
> # I need to make an empty grid to hold the data.
> 
>          interpImage <-
> interpolate(gddThisYear,monarchStaLocs,list(mean=TRUE, variance=TRUE))
>          message("Latest interp done!")
>          browser()
> 
> # Assign the result of interpolation as an attribute to the Monarch
> Station Locations File: 'newcol'
> 
>          cbind(monarchStasWithGDD at data,newcol)
>       }
> # Write the output file
> 
>       writePointsShape(monarchStasWithGDD,outFileName)
> 
>    }
> }
> ############################################################################################################
> 
> 
> 
> 
> On 10/26/2010 1:09 PM, Edzer Pebesma wrote:
>> Are you sure you loaded package intamap before trying this?
>>
>> On 10/26/2010 09:05 PM, Rick Reeves wrote:
>>> Hello:
>>>
>>> I note a conflict in the documentation for Intamap/interpolate(),
>>> to know how to resolve:
>>>
>>> I have two SpatalPointsDataFrame objects:
>>>
>>>   growingDegreeObservations<- readShapePoints("OhioGDDStationsGP.shp")
>>> # computed surface phenomena, for individual lat/lon points
>>>   OrgStaLocs<- readShapePoints("Org_Locations.shp")                    #
>>> species observation stations, for DIFFERENT lat/lon points
>>>
>>> # Objective: Interpolate the growingDegree points into a SpatialGrid (?)
>>> raster field, and then
>>> # overlay the observation stations on to the field, and assign field
>>> values to each observation station points
>>>
>>> # according to intamap documentation, the interpolate() method accepts
>>> two SptatialPointsDataFrame objects, interpolates
>>> # the first ($value field) into a grid, and assigns interpolated
>>> observations to the predicted locations (monarchStaLocs).
>>>
>>> interpImage<- interpolate(growingDegreeObservations
>>> ,OrgStaLocs,list(mean=TRUE, variance=TRUE))
>>>
>>> However, when this line is executed, the error occurs:
>>>
>>> Error in function (classes, fdef, mtable)  :
>>>    unable to find an inherited method for function "interpolate", for
>>> signature "SpatialPointsDataFrame"
>>>
>>> I guess that this refers to the first argument, and that the argument
>>> must be a SpatialPixels or SpatialGrid data frame.
>>> Questions:
>>>
>>> 1) Do I understand the inputs and outputs of interpolate() correctly?
>>>
>>> 2) How best to transform the incorrect (SpatialPointsDataFrame) argument
>>>       to match the required inputs? E.G., create the interpolated
>>> SpatialPixelsDataFrame
>>>       of observations before calling interpolate())
>>>
>>> 3) Is there a better R technique (e.g., direct call to krige()) for
>>> computing my solution?
>>>
>>> Thanks, Rick R
>>>
>>>
>>>
>>>
>>>
>>>
>>>
> 

-- 
Edzer Pebesma
Institute for Geoinformatics (ifgi), University of Münster
Weseler Straße 253, 48151 Münster, Germany. Phone: +49 251
8333081, Fax: +49 251 8339763  http://ifgi.uni-muenster.de
http://www.52north.org/geostatistics      e.pebesma at wwu.de



More information about the R-sig-Geo mailing list