change in sp::Lines() breaks example in my package
Thanks, Edzer
What was not clear from either the documentation or the error message
was what you just
said: "each Lines *colllection* only has a single ID" . The .Rd just says
|ID| a unique character identifier
but 'unique' in what context? help(Lines) gives no examples, so there
was no way for me to figure this out.
It might help to revise the documentation, and you are welcome to use
any part of this example if
it helps. At a minimum, if I understand correctly, I suggest something like
|ID| a single character identifier, unique among other SpatialLines objects,
applying to the collection of lines in \code{slinelist}
Your 'short way out' works for me, and I have no need to index
particular streets.
best,
-Michael
Edzer Pebesma wrote:
Michael, indeed a check was added recently to make sure that each Lines
colllection only has a single ID; I don't believe the array of IDs you
passed it had the effect you desired.
The short way out would be to have a simple
Lsl1 <- Lines(Ll1,"Streets")
but the nicer way assigns street IDs to individual streets:
i = 0
Lsl1 <- lapply(slist, function(x) {
i <<- i+1
Lines(Line(x), as.character(i))
})
rm(i)
Snow.streets.sp <- SpatialLines(Lsl1)
which now lets you index Snow.streets.sp, as in
Snow.streets.sp[100] # or
Snow.streets.sp["100"]
BTW it's the first time I advice someone to use <<- and I'd be happy for
a suggestion to get rid of it!
On 07/27/2010 04:22 PM, Michael Friendly wrote:
[Running R.2.11.1, Win XP]
I just updated sp from sp_0.9-65 to sp_0.9-66 after receiving a report
from the CRAN team that my HistData
package now generates errors in at least one documentation example. It
occurs in example(Snow), which
worked successfully under the previous versions of sp. I don't
understand the nature of the error, or how to
correct it. Can someone point me in a useful direction?
Here is the complete portion of the example (to draw Snow's cholera map
of London), suitable for cut/paste to R:
#install.packages("HistData") # if necessary
library(HistData)
library(sp)
# streets
slist <-
split(Snow.streets[,c("x","y")],as.factor(Snow.streets[,"street"]))
Ll1 <- lapply(slist,Line)
Lsl1 <- Lines(Ll1,paste("Street",1:length(Ll1)))
Snow.streets.sp <- SpatialLines(list(Lsl1))
plot(Snow.streets.sp, col="gray")
title(main="Snow's Cholera Map of London")
# deaths
Snow.deaths.sp = SpatialPoints(Snow.deaths[,c("x","y")])
plot(Snow.deaths.sp, add=TRUE, col ='red', pch=15, cex=0.6)
# pumps
spp <- SpatialPoints(Snow.pumps[,c("x","y")])
Snow.pumps.sp <- SpatialPointsDataFrame(spp,Snow.pumps[,c("x","y")])
plot(Snow.pumps.sp, add=TRUE, col='blue', pch=17, cex=1.5)
text(Snow.pumps[,c("x","y")], labels=Snow.pumps$label, pos=1, cex=0.8)
Here is the transcript showing the error with Lines:
# streets
slist <-
split(Snow.streets[,c("x","y")],as.factor(Snow.streets[,"street"]))
Ll1 <- lapply(slist,Line)
Lsl1 <- Lines(Ll1,paste("Street",1:length(Ll1)))
Error in Lines(Ll1, paste("Street", 1:length(Ll1))) : Single ID required
Snow.streets.sp <- SpatialLines(list(Lsl1))
Error in is.vector(X) : object 'Lsl1' not found
Some tests:
length(Ll1)
[1] 528
length(unique(paste("Street",1:length(Ll1))))
[1] 528
Below is my sessionInfo():
sessionInfo()
R version 2.11.1 (2010-05-31)
i386-pc-mingw32
locale:
[1] LC_COLLATE=English_United States.1252
[2] LC_CTYPE=English_United States.1252 [3] LC_MONETARY=English_United
States.1252
[4] LC_NUMERIC=C [5] LC_TIME=English_United
States.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] sp_0.9-66 KernSmooth_2.23-3 HistData_0.6-8
loaded via a namespace (and not attached):
[1] grid_2.11.1 lattice_0.18-8 tools_2.11.1 >
Michael Friendly Email: friendly AT yorku DOT ca Professor, Psychology Dept. York University Voice: 416 736-5115 x66249 Fax: 416 736-5814 4700 Keele Street Web: http://www.datavis.ca Toronto, ONT M3J 1P3 CANADA