Identyfikatory, gniazda i funkcje typu zastosuj. Moje trzy najpopularniejsze rzeczy, które są absolutnie niezbędne do wszystkiego, co robię. Myślałem, że odpowiem tylko po to, aby wygenerować więcej treści na ten temat.
Poniższy kod działa, ale zachowuje „bezużyteczne” wartości identyfikatora. Lepszy kod poświęciłby czas na przeanalizowanie rzeczy, tak aby każdy trakt miał stan FIPS, FIPS okręgowy i FIPS traktowany jako jego identyfikator. Jeszcze tylko kilka linijek, aby tak się stało, ale ponieważ nie obchodzi Cię dokument tożsamości, na razie to pomijamy.
#Your Original Code
library(sp)
library(UScensus2000)
library(UScensus2000tract)
data(state) # for state names
states <- gsub( " ", "_", tolower(state.name) )
datanames <- paste(states,"tract", sep=".")
data( list=datanames )
lst <- lapply(datanames,get)
#All good up to here, but we need to create unique ID's before rbind
#Modified from Roger Bivand's response at:
# https://stat.ethz.ch/pipermail/r-sig-geo/2007-October/002701.html
#For posterity: We can access the ID in two ways:
class(alaska.tract)
getSlots(class(alaska.tract))
class(slot(alaska.tract, "polygons")[[1]])
getSlots(class(slot(alaska.tract, "polygons")[[1]]))
#So to get all ID's
sapply(slot(alaska.tract, "polygons"), function(x) slot(x, "ID"))
#or
rownames(as(alaska.tract, "data.frame"))
#These should be the same, but they are quite different...sigh. Doesn't matter for
#what follows though
#To make them uniform we can write a function using the spChFIDs function from sp:
makeUniform<-function(SPDF){
pref<-substitute(SPDF) #just putting the file name in front.
newSPDF<-spChFIDs(SPDF,as.character(paste(pref,rownames(as(SPDF,"data.frame")),sep="_")))
return(newSPDF)
}
#now to do this for all of our state files
newIDs<-lapply(lst,function(x) makeUniform(x))
#back to your code...
nation <- do.call( rbind, newIDs )
rbind
wsp
pakiecie? Myślałem o przekształceniu czegoś takiego w ten kod w,deduplicateIDs=TRUE
argument w metodzie ...