From 4d3e50ad98003fe834011200634cf1d4fb3b3a5b Mon Sep 17 00:00:00 2001 From: Roger Bivand Date: Mon, 22 Jul 2024 15:48:57 +0200 Subject: [PATCH 1/4] first attempt at #163 --- R/read.gwt2nb.R | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/R/read.gwt2nb.R b/R/read.gwt2nb.R index 72f40125..e5debf2a 100644 --- a/R/read.gwt2nb.R +++ b/R/read.gwt2nb.R @@ -185,3 +185,38 @@ nb2INLA <-function(file, nb) } } +read.swmdbf2listw <- function(fn, region.id=NULL, style=NULL, zero.policy=NULL) { + if (is.null(zero.policy)) + zero.policy <- get.ZeroPolicyOption() + stopifnot(is.logical(zero.policy)) + if (is.null(style)) { + style <- "M" + } + if (style == "M") + warning("style is M (missing); style should be set to a valid value") + + res <- NULL + + if (requireNamespace("foreign", quietly=TRUE)) { + df <- try(foreign::read.dbf(fn), silent=TRUE) + if (inherits(df, "try-error")) stop(df[1]) + n <- max(c(df[,2], df[,3])) + ids <- 1:n + if (!all(df[,2] %in% ids) || !all(df[,3] %in% ids)) + warning("some IDs missing") + df1 <- df[order(df[,2], df[,3]), -1] + attr(df1, "n") <- n + class(df1) <- c(class(df1), "spatial.neighbour") + res0 <- try(sn2listw(df1, style=style, zero.policy=zero.policy), + silent=TRUE) + if (inherits(res0, "try-error")) stop(res0[1]) + else res <- res0 + } else warning("foreign::read.dbf not available") + + if (!inherits(res, "listw")) warning("creation of listw object from SWM DBF file failed") + res +} + +read_swm_dbf <- function(fn) { + read.swmdbf2listw(fn, style="B") +} From 7d843fefeda438758df9fe750e77d76711b74e71 Mon Sep 17 00:00:00 2001 From: Roger Bivand Date: Tue, 13 Aug 2024 14:55:46 +0200 Subject: [PATCH 2/4] next steps on SWM/DBF import --- DESCRIPTION | 2 +- NAMESPACE | 5 ++-- R/listw2sn.R | 8 ++++++ R/read.gwt2nb.R | 13 ++++++++- .../misc/nc-contiguity-unique-id-island.swm | Bin 0 -> 4681 bytes inst/etc/misc/nc-contiguity-unique-id.swm | Bin 0 -> 4709 bytes inst/etc/misc/nc_contiguity_unique_id.dbf | Bin 0 -> 24662 bytes .../misc/nc_contiguity_unique_id_islands.dbf | Bin 0 -> 24512 bytes man/read.gwt2nb.Rd | 26 ++++++++++++++++-- 9 files changed, 47 insertions(+), 7 deletions(-) create mode 100644 inst/etc/misc/nc-contiguity-unique-id-island.swm create mode 100644 inst/etc/misc/nc-contiguity-unique-id.swm create mode 100644 inst/etc/misc/nc_contiguity_unique_id.dbf create mode 100644 inst/etc/misc/nc_contiguity_unique_id_islands.dbf diff --git a/DESCRIPTION b/DESCRIPTION index 6e0e8103..71c7c5c7 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: spdep Version: 1.3-6 -Date: 2024-06-12 +Date: 2024-08-13 Title: Spatial Dependence: Weighting Schemes, Statistics Encoding: UTF-8 Authors@R: c(person("Roger", "Bivand", role = c("cre", "aut"), diff --git a/NAMESPACE b/NAMESPACE index 2c48f6e5..03653895 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -39,8 +39,9 @@ export(gabrielneigh, geary.test, geary, geary.mc, globalG.test, graph2nb, joincount.test, joincount.mc, joincount.multi, print.jcmulti, knearneigh, knn2nb) -export(listw2sn, sn2listw, read.gwt2nb, write.sn2gwt, lm.LMtests, - lm.RStests, SD.RStests, +export(listw2sn, sn2listw, read.gwt2nb, write.sn2gwt, + read.swmdbf2listw, read_swm_dbf, + lm.LMtests, lm.RStests, SD.RStests, lm.morantest, localG, localG_perm, localmoran, localmoran_perm, moran, moran.test, moran.mc, moran.plot, localmoran.sad, lm.morantest.sad, nb2listw, nb2listwdist, nb2mat, listw2mat, mat2listw, nbdists, nblag, diff --git a/R/listw2sn.R b/R/listw2sn.R index da86ec7b..5db7ff49 100644 --- a/R/listw2sn.R +++ b/R/listw2sn.R @@ -74,6 +74,14 @@ sn2listw <- function(sn, style=NULL, zero.policy=NULL, from_mat2listw=FALSE) { warning("no-neighbour observations found, set zero.policy to TRUE;\nthis warning will soon become an error") } } + attr(res$neighbours, "region.id") <- region.id + res$neighbours <- sym.attr.nb(res$neighbours) + NE <- n + sum(card(res$neighbours)) + if (get.SubgraphOption() && get.SubgraphCeiling() > NE) { + ncomp <- n.comp.nb(res$neighbours) + attr(res$neighbours, "ncomp") <- ncomp + if (ncomp$nc > 1) warning("neighbour object has ", ncomp$nc, " sub-graphs") + } if (!(is.null(attr(sn, "GeoDa")))) attr(res, "GeoDa") <- attr(sn, "GeoDa") attr(res, "region.id") <- region.id diff --git a/R/read.gwt2nb.R b/R/read.gwt2nb.R index e5debf2a..5baf9680 100644 --- a/R/read.gwt2nb.R +++ b/R/read.gwt2nb.R @@ -200,13 +200,24 @@ read.swmdbf2listw <- function(fn, region.id=NULL, style=NULL, zero.policy=NULL) if (requireNamespace("foreign", quietly=TRUE)) { df <- try(foreign::read.dbf(fn), silent=TRUE) if (inherits(df, "try-error")) stop(df[1]) - n <- max(c(df[,2], df[,3])) + if (is.null(region.id)) { + rn <- range(c(df[,2], df[,3])) + region.id <- as.character(rn[1]:rn[2]) + warning("region.id not given, c(MYID, NID) range is ", + paste(rn, collapse=":")) + } + n <- length(region.id) ids <- 1:n + df[,2] <- match(df[, 2], region.id) + if (anyNA(df[,2])) warning("NAs in MYID matching") + df[,3] <- match(df[, 3], region.id) + if (anyNA(df[,3])) warning("NAs in NID matching") if (!all(df[,2] %in% ids) || !all(df[,3] %in% ids)) warning("some IDs missing") df1 <- df[order(df[,2], df[,3]), -1] attr(df1, "n") <- n class(df1) <- c(class(df1), "spatial.neighbour") + attr(df1, "region.id") <- region.id res0 <- try(sn2listw(df1, style=style, zero.policy=zero.policy), silent=TRUE) if (inherits(res0, "try-error")) stop(res0[1]) diff --git a/inst/etc/misc/nc-contiguity-unique-id-island.swm b/inst/etc/misc/nc-contiguity-unique-id-island.swm new file mode 100644 index 0000000000000000000000000000000000000000..8294de479a9f9c27617b04b0dedb053ce1ff744d GIT binary patch literal 4681 zcmZ{li<8r26vgYVXuwz0s8Oq~Am9U$MG>$nH`}J$Xg4iw%FD+t!p_Ky;)wEp`zLsQ zd%2TwQt!->Y`$|}=R2u4%Ehvp)wX@%{Pti~SJzi%HL}&i2Y)_3tVV<7ylARox+uqW zu~*veaJgUq@#ybg_lw^TA3eBt_u>Bb)r*%0RXtxdu`@08M^o*U zsdo0lW{M#@gHSXAXg!<`zen$@D7&!*Mzw*FG@W>F0r ztxwa{vYd!mEQS+KmnBclY^ql(r#HoDG@R*iPM>jgs~p{A;AUyfqsNDXNwK_ReWl32;vcaNZE!6g+~P+0%Lf?^)rB zAL_qx-ZSdJc}6%cq(Wct2wrNON8d!xT~1>3fI~evFAE+~Co$gBlX~#sWWsBLM{qM^ z9=PBof!T85J;9^pq62;D|Ga<}ZwVg3OYJ$mfCuMA;cej^!K3AIPG9Ph6ZPPG1UIu6 z^a3vRn3Eab6;2BtEf)^`sYxEa;d%rwHR`Yn8o;BbM{p8D4>Y7VJUHA7`n)fEAb3Ph z-_V=7tniWG5qVn%huz4d#_IxnkKm<7Pi6>@bniYf z-qCygj6I_^d((4EpwB15dBG$4Wyaia>B(H&B|Cg5c(hzJM4Qk(e21po=a+&<6*-+|U?4cN4!m z+&eRMbbs~H( zc(gs(ksN+6*d48yjh)eICU~?t)MPGt(DN%{M_At@w<|is6L@-^C(wa<=n~)c{0X&D`h( zpWfjkdZXtp!K3BVmwP~e<{*c;@G3bA!6S0|W_ocp*}et!Ox9*XC8bI-xwNoy^tCH z#9!!$hSvp;sFxVtpg+G8_!j>x1-!EE8=x2W6aBd_X7Y%-si7ymO+aIG^9W92%)BAQ z@5F!4d&bP{8s9nlu)`g}BWh)aSJ58-#%~BdV2=aguHX?ledAlFKfeRrU3(UKQ3s9U z8>JWi`dK&-Jfd!H=*Qe>8#?}^=Y7E=xS4U!=!rhueRxHWir}S&7vSLyIOKKxlp1r< zdnhn>d;`qt5j8X8H<6m>1pfbdML-LW;HAb6?2oSO#QyBaPF-Ddqi4*(yv)vA-ET27 z?vguL@6VobFZ9Nr%tn9ijs9IdbE5}4u|GYTrMr7-%npw_>_@HcE~$~rE@&A$9O(HM z!6S6aj2fE)HJO_p9>GcMKrg6=hSa1!eb?3FJ)VZkjMO_2;NBDN3m#FwZ=A6gbq@q; Zba|iKM14R7n0YB!5& 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 literal 0 HcmV?d00001 diff --git a/man/read.gwt2nb.Rd b/man/read.gwt2nb.Rd index 2ac6ecff..57f35d6e 100644 --- a/man/read.gwt2nb.Rd +++ b/man/read.gwt2nb.Rd @@ -3,6 +3,8 @@ \alias{read.gwt2nb} \alias{write.sn2gwt} \alias{read.dat2listw} +\alias{read.swmdbf2listw} +\alias{read_swm_dbf} \alias{write.sn2dat} %- Also NEED an '\alias' for EACH other topic documented here. \title{Read and write spatial neighbour files} @@ -14,22 +16,26 @@ read.gwt2nb(file, region.id=NULL) write.sn2gwt(sn, file, shpfile=NULL, ind=NULL, useInd=FALSE, legacy=FALSE) read.dat2listw(file) write.sn2dat(sn, file) +read.swmdbf2listw(fn, region.id=NULL, style=NULL, zero.policy=NULL) +read_swm_dbf(fn) } %- maybe also 'usage' for other objects documented here. \arguments{ - \item{file}{name of file with weights data} + \item{file, fn}{name of file with weights data} \item{region.id}{region IDs} \item{sn}{a \code{spatial.neighbour} object} \item{shpfile}{character string: if not given Shapefile name taken from GWT file for this dataset} \item{ind}{character string: region id indicator field name} \item{useInd}{default FALSE, if TRUE, write \code{region.id} attribute ID key tags to output file (use in OpenGeoDa will depend on the shapefile having the field named in the \code{ind} argument matching the exported tags)} \item{legacy}{default FALSE; if TRUE, header has single field with number of observations only} + \item{style}{default NULL, missing, set to "M" and warning given; if not "M", passed to \code{\link{nb2listw}} to re-build the object} + \item{zero.policy}{default NULL, use global option value; if FALSE stop with error for any empty neighbour sets, if TRUE permit the weights list to be formed with zero-length weights vectors} } \details{ -Attempts to honour the region.id argument given when reading GWT files. If the region IDs given in \code{region.id=} do not match the origins or destinations in the GWT file, an error will be thrown reporting \code{Error: !anyNA(reg*dij) is not TRUE} where '*' may be \sQuote{o} for origins or \sQuote{d} for destinations. +Attempts to honour the region.id argument given when reading GWT and SWM/DBF files. If the region IDs given in \code{region.id=} do not match the origins or destinations in the GWT file, an error or warning will be thrown, which should be considered carefully. \code{read_swm_dbf} is a simplified interface to \code{read.swmdbf2listw}. } \value{ - \code{read.gwt2nb} returns a neighbour "nb" object with the generalised weights stored as a list element called "dlist" of the "GeoDa" attribute. + \code{read.gwt2nb} returns a neighbour "nb" object with the generalised weights stored as a list element called "dlist" of the "GeoDa" attribute; \code{read.swmdbf2listw} returns a "listw" object read from a DBF file exported from an ArcGIS SWM object. } \references{Luc Anselin (2003) \emph{GeoDa 0.9 User's Guide}, pp. 80--81, Spatial Analysis Laboratory, Department of Agricultural and Consumer Economics, University of Illinois, Urbana-Champaign, \url{http://geodacenter.github.io/docs/geoda093.pdf}; also \url{http://spatial-econometrics.com/data/contents.html}} @@ -61,5 +67,19 @@ diffnb(listwmat1$neighbours, COL.nb, verbose=TRUE) listwmat2 <- read.dat2listw(system.file("etc/weights/wmat.dat", package="spdep")[1]) diffnb(listwmat1$neighbours, listwmat2$neighbours, verbose=TRUE) +nc_sf <- sf::st_read(system.file("gpkg/nc.gpkg", package="sf")[1]) +nc_sf$UniqueID <- 1:nrow(nc_sf) +fn <- system.file("etc/misc/nc_contiguity_unique_id.dbf", package="spdep")[1] +nc1 <- read.swmdbf2listw(fn, style="B") +nc1a <- read.swmdbf2listw(fn, region.id=as.character(nc_sf$UniqueID), + style="B") +all.equal(nc1, nc1a) +fn <- system.file("etc/misc/nc_contiguity_unique_id_islands.dbf", + package="spdep")[1] +try(nc1i <- read.swmdbf2listw(fn, style="B")) +nc1i <- read.swmdbf2listw(fn, style="B", zero.policy=TRUE) +nc1ia <- read.swmdbf2listw(fn, region.id=as.character(nc_sf$UniqueID), + style="B", zero.policy=TRUE) +all.equal(nc1i, nc1ia) } \keyword{spatial} From cb43628a80283e286411b03ed73e4388c97183f8 Mon Sep 17 00:00:00 2001 From: Roger Bivand Date: Wed, 14 Aug 2024 13:11:53 +0200 Subject: [PATCH 3/4] conclude #163 with examples for first/last observations as islands --- NAMESPACE | 2 +- R/read.gwt2nb.R | 17 ++++++++- inst/etc/misc/contiguity-myid.swm | Bin 0 -> 2827 bytes .../etc/misc/contiguity-unique-id-islands.swm | Bin 0 -> 2791 bytes inst/etc/misc/contiguity-unique-id.swm | Bin 0 -> 2831 bytes inst/etc/misc/contiguity_myid.dbf | Bin 0 -> 13762 bytes inst/etc/misc/contiguity_unique_id.dbf | Bin 0 -> 13762 bytes .../etc/misc/contiguity_unique_id_islands.dbf | Bin 0 -> 13662 bytes inst/etc/shapes/california.gpkg | Bin 0 -> 163840 bytes man/read.gwt2nb.Rd | 35 +++++++++++++++++- 10 files changed, 50 insertions(+), 4 deletions(-) create mode 100644 inst/etc/misc/contiguity-myid.swm create mode 100644 inst/etc/misc/contiguity-unique-id-islands.swm create mode 100644 inst/etc/misc/contiguity-unique-id.swm create mode 100644 inst/etc/misc/contiguity_myid.dbf create mode 100644 inst/etc/misc/contiguity_unique_id.dbf create mode 100644 inst/etc/misc/contiguity_unique_id_islands.dbf create mode 100644 inst/etc/shapes/california.gpkg diff --git a/NAMESPACE b/NAMESPACE index 03653895..96ad4a21 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -40,7 +40,7 @@ export(gabrielneigh, geary.test, geary, geary.mc, globalG.test, graph2nb, knearneigh, knn2nb) export(listw2sn, sn2listw, read.gwt2nb, write.sn2gwt, - read.swmdbf2listw, read_swm_dbf, + read.swmdbf2listw, read_swm_dbf, write.sn2DBF, lm.LMtests, lm.RStests, SD.RStests, lm.morantest, localG, localG_perm, localmoran, localmoran_perm, moran, moran.test, moran.mc, moran.plot, localmoran.sad, lm.morantest.sad, diff --git a/R/read.gwt2nb.R b/R/read.gwt2nb.R index 5baf9680..91fd53ce 100644 --- a/R/read.gwt2nb.R +++ b/R/read.gwt2nb.R @@ -156,6 +156,21 @@ write.sn2Arc <- function(sn, file, field=NULL) { close(con) } +write.sn2DBF <- function(sn, file) { + if(!inherits(sn, "spatial.neighbour")) + stop("not a spatial.neighbour object") + n <- attr(sn, "n") + if (n < 1) stop("non-positive number of entities") + nms <- as.character(attr(sn, "region.id")) + sn[,1] <- as.integer(nms[sn[,1]]) + sn[,2] <- as.integer(nms[sn[,2]]) + sn <- cbind(data.frame(Field1=rep(0L, nrow(sn))), sn) + if (requireNamespace("foreign", quietly=TRUE)) { + foreign::write.dbf(sn, file) + } else warning("foreign::read.dbf not available") + invisible(sn) +} + # Copyright 2011 Virgilio Gomez-Rubio # a function to export from nb object to a particular file format # which is used by INLA when fitting spatial models for lattice data @@ -198,7 +213,7 @@ read.swmdbf2listw <- function(fn, region.id=NULL, style=NULL, zero.policy=NULL) res <- NULL if (requireNamespace("foreign", quietly=TRUE)) { - df <- try(foreign::read.dbf(fn), silent=TRUE) + df <- try(foreign::read.dbf(fn, as.is=TRUE), silent=TRUE) if (inherits(df, "try-error")) stop(df[1]) if (is.null(region.id)) { rn <- range(c(df[,2], df[,3])) diff --git a/inst/etc/misc/contiguity-myid.swm b/inst/etc/misc/contiguity-myid.swm new file mode 100644 index 0000000000000000000000000000000000000000..695c36b913b10b9d3c7a42910c905083189da236 GIT binary patch literal 2827 zcmZ{lNpBlR5QUY*afqDezyl9D81Oxa0_2i8sK#W=9Dp1$I!m<)Y~o(o?J)Ev$IGP|LTmhh(Vw(!32 zv4EDJ3Jc+Z5Y5k>F!*~d)I}{H3Fs8fecJ{{xWE}7`2HnCbHB{q&;~VsEqoVW>aV|F zGB}bG&Tk2D{8mW$wT<^j>w53N_pYAz4$l0eXEe`o!qDJo4m99QQx0lAIxE!nnedyC z_OxT~Y9Adw5tyr=gr9|I&LK0n;ztc%2-KKz&5T|-*AKP!zBSF>2YUaA0JmtKZ*P^e zD*Y=y}@Dj==|i`bBK=EQI?)dZ#;vE{_T5gf`4cH0RnfdQQ#E zHF22YR{X0fpIB=(YhMG8#^9f-tzynTq1T=t4 zs==}?wC}poV|1pcO}bJ$zVwNCMicnJFWO-b;D@%(IrVAT_j=D9{~$#3^LwlCrj`rB zT(~S;6{xX!=9cZQ-k}rRm=S8ZCq(nunUN1}&dUmd;XU#Gr@Qgj)i!$(7#u zwlO!v+BeN@JA1P(ZjXYQg+DyfqtRM4Z-gLvlh+$GNTSSTokC2?;5q< v7Sg%s81v=x#=Tn|fZ|mx}HdLjxPyc@Q;-D(?&8lds zV!jU3x>y9;J32o6bANGg{Ku1jj*j!HUbW41Vv}Njb#(aeUq?@$@9*Y&&Er+DdwE%H znxdYBMQCQr(n33#S7j*bJUm)0>rgj#H*aR^u$e9ArS0T(yQo9;>ujU@lgLf+U>@|N zsTN^cg%c<4PvXbN4~uz=%ZYy-8g3V>P?Fb=JSf)dDy+qGCvTf}U9Xn&YVugWl)G71 zlSTrNwB3Z69ESgK)F4=J>@yJ}WlA+w{rd z^Mi{&52BsZ0OdRvI*=LbfOYkdTxnE)z^?+D!35k#jnShob2|L1lA)22X8~nW%>Y|np z1ayk#zNx_xF66-nzW0P^?w8n`dH~&N*SlNa z8@hhIJ@cck(LBf4(BNziG~i5M4r)F-E7Ud;c7<+FGrOYa=y{$_>->4`r9NhYxb&acef7~N*Mc6Bo4$P`MDw_*(IYgVraMA^ zzY_ac@8HPp(5LSH4~_m1i=HvJ^y-=r&2uJ34EV8^#AO%R{cg>v z%*cx``{VP{$AO%DSEvadaN^s725{-l?8wm3b*0DXOi%lCrFMMj6SIpZ@PS`6*CRFf z!NWOseTMes_7oi9eNNyEIrvRI{qr?4dXFaXU>@Mj-bZsDiG8I9#3WaLT|?s>KExt! zcNd4oS?7pOI|96kk5=6s7#Yvu2sixkB~G+cj_e2Xz%2N;gME3~E;1{`#h+Ol3*EU% zj2LJ+6fO(ICRcaAQ)5Pm$?l;0%XWt6#ALVl=J+>}^U=Jn)X>B=??+ZGkQ8ed}8QQoG%mliP1!kqs|9@*i B->(1w literal 0 HcmV?d00001 diff --git a/inst/etc/misc/contiguity-unique-id.swm b/inst/etc/misc/contiguity-unique-id.swm new file mode 100644 index 0000000000000000000000000000000000000000..1bdb3cb88c6928ff47c782006ffe256774b48170 GIT binary patch literal 2831 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 literal 0 HcmV?d00001 diff --git a/inst/etc/misc/contiguity_unique_id.dbf b/inst/etc/misc/contiguity_unique_id.dbf new file mode 100644 index 0000000000000000000000000000000000000000..b9352fdc30480ce24562c496b5fdb4795347dee8 GIT binary patch literal 13762 zcmb7~yNXmn5Qaxgys#jc8J%2^IX5r4u5PlC;tM#z!Xg-$`7*w#Ra3qH-^c`CSFjwM z`KB&iRbAc3$A6wYeevjU_e13k`pQ}l7)YGh|chfY#Ia*GykN(=^M-l6XQDR$1i9Pfp zs}}h|b(q+Pbx_ZxV|hEOW2aVyzfD3Lij|3R9n^E_ShrEDa9+hPH=)rLF-I1oSczC^ zbVcmLI`(lL@1Y;D(oLui6SSg4;1v{s>)b>T@l!G5gT1W6L80wMT|#x zr?HCf4Q8T=un$F7#6s&s1dgr<9ILRUNwCNd5p;&j{#=4PoC(@RMQk+NMeOl}JlA}+ z&@~r9&p5M)ZCJ-fS5Wg+))w+y#7gVj#IRMgYI6=Nq5Fr41$Li~h%QfJ)e+Eh6ZB?c z(Ii8&J^d|7ZO9K3)N>K^%xSBz=bB4s_sO19LeEhh0Xu^UydJWOPL|d|XShXk39b(j zI7>{>iV{K3ANGUZa+<)I7@e?X3EXjV4=ACXx+7>_MF(j@qbmZhxrtaA)EPwJED?e0 zT)Q*&!$fF9eu%)CD1uI8IqQ{dG`gAq=(%qbpBx4;r z^gQR6k{Nn#f}Vss0%l@IM81$%W7Go+L#XdromRxyVs7OE2t@Bf)$mscS%my z$a4|2w_69zT@!Qy=m_eEri?kBkmn*YCkF|d?bboFT{FW({V+kZT?DqB!1?hGQZRVJua(bq~gI5TABH5n(URn|e*+yw1#BJf@-0@sHKdMe5(w}jplbwuPO zsSgvhGnm-msVK9lWQ9AY2^!swfZZppFTv3jkugBg6+v&+(%%QOpbimqH?WTE*~ky+ zpnI)#&|cCJbOmJE=0Ia}hcDj#)+DjM^$X zg?9vvm3C(wD-rapmZy#q94is@?3^)eLc6F4diQD_^c{-{dR8+*Z&GtwFUflll!+qf zer_G~4%q~q^z)ZX=-rZueCL2XmyW!#9wcaVrGuWMvOhn#&aCPP*sn~`w@V!n9hk(* z1lIj&-xz7y7N(6o9WgWBzP0;CRSV3{bXfBBOUQ`9D5dtY{6IpdHQxty;}+6ZPB# zwMqniAC-Nr1b1o^!=7gcMr*E#jGhPcOjknRW|*L7=j?<{sOKW+lwloozA}M(yR5=9 mgNW?%XazO((RUL$dza8j-vr(Vr33eN5%g__t-2ViSN{NXfnh2D literal 0 HcmV?d00001 diff --git a/inst/etc/misc/contiguity_unique_id_islands.dbf b/inst/etc/misc/contiguity_unique_id_islands.dbf new file mode 100644 index 0000000000000000000000000000000000000000..40853600b346b97b4a93d5cc6890540a7b87c489 GIT binary patch literal 13662 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 z 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 n7fm%Y;lg{eduVW6T= Date: Wed, 14 Aug 2024 14:07:25 +0200 Subject: [PATCH 4/4] conclude #163 with examples for first/last observations as islands --- man/read.gwt2nb.Rd | 2 ++ 1 file changed, 2 insertions(+) diff --git a/man/read.gwt2nb.Rd b/man/read.gwt2nb.Rd index b70e90fa..c6b2a330 100644 --- a/man/read.gwt2nb.Rd +++ b/man/read.gwt2nb.Rd @@ -69,6 +69,7 @@ diffnb(listwmat1$neighbours, COL.nb, verbose=TRUE) listwmat2 <- read.dat2listw(system.file("etc/weights/wmat.dat", package="spdep")[1]) diffnb(listwmat1$neighbours, listwmat2$neighbours, verbose=TRUE) +if (require("foreign", quietly=TRUE)) { nc_sf <- sf::st_read(system.file("gpkg/nc.gpkg", package="sf")[1]) nc_sf$UniqueID <- 1:nrow(nc_sf) fn <- system.file("etc/misc/nc_contiguity_unique_id.dbf", package="spdep")[1] @@ -113,4 +114,5 @@ cal1_1n_rt <- read.swmdbf2listw(file, style="B", zero.policy=TRUE) all(isTRUE(all.equal(cal1a_1n$neighbours, cal1_1n_rt$neighbours))) all(isTRUE(all.equal(cal1a_1n$weights, cal1_1n_rt$weights))) } +} \keyword{spatial}