On Sun, 16 Jun 2013, Lee Hachadoorian wrote:
Hello,
I'm trying to map a SpatialLinesDataFrame where line weight is
data-dependent. I can produce an unclassed map but not a classed map.
findInterval() returns a vector, but when I try to assign it to lwd I
get "cannot coerce type 'S4' to vector of type 'double'", even though
docs say findInterval() returns a vector and typeof indicates integer
(which should be coerceable).
# BEGIN
library(sp)
library(classInt)
# Provide your own SLDF, see below*
sldfTemp = sldfYourData
sldfTemp$x = sldfTemp$YourVariable
#Create dummy data
sldfTemp$x = runif(length(sldfTemp$x), 1, 7)
# All same weight.
plot(sldfTemp, lwd=3) # This works
# Unclassed, line weight proportional to data value.
plot(sldfTemp, lwd=sldfTemp$x) # This works
# Recycled vector, arbitrary.
plot(sldfTemp, lwd=c(1,3,7)) # This works
#Create class intervals
ciX = classIntervals(sldfTemp$x, n=5, style="quantile")
# Classed, line weight equals class index.
lwd = findInterval(sldfTemp$x, head(ciX$brks, n=-1))
plot(sldfTemp, lwd) # This does not work
typeof(lwd)
lwd = as.double(lwd) # This works!
typeof(lwd)
plot(sldfTemp, lwd) # This still does not work
Would using the argument name help?
library(sp)
data(meuse.grid)
coordinates(meuse.grid) <- c("x", "y")
gridded(meuse.grid) <- TRUE
fullgrid(meuse.grid) <- TRUE
cL <- contourLines(as.image.SpatialGridDataFrame(meuse.grid["dist"]))
library(maptools)
SPcL <- ContourLines2SLDF(cL)
SPcL$x <- as.numeric(as.character(SPcL$level))
ciX = classIntervals(SPcL$x, n=5, style="quantile")
lwd = findInterval(SPcL$x, head(ciX$brks, n=-1))
# plot(SPcL, lwd)
# Error in as.double(x) :
# cannot coerce type 'S4' to vector of type 'double'
plot(SPcL, lwd=lwd)