## an exploration of https://github.com/r-spatial/sf/issues/603
library(sf)
## Linking to GEOS 3.5.1, GDAL 2.2.2, proj.4 4.9.2
suppressPackageStartupMessages(library(dplyr))
p1 <- readRDS("p1.rds")
p2 <- readRDS("p2.rds")


try(p3 <- sf::st_difference(p1, p2))


## obtained from the GEOS message
pt <- c(1588363.7352041774, 4278353.7855906803)

## indicates the index at various levels 
## this is 
## L3 1st multipolygon (there is only one)
## L2 27th island
## L1 14 hole in L2
## (note, first one might not be ring causing the problem exactly but arrange gives candidates)
st_coordinates(p2) %>% as_tibble() %>% 
  mutate(idx = abs(X - pt[1]) + abs(Y - pt[2])) %>% arrange(idx)
## # A tibble: 33,399 x 6
##          X       Y    L1    L2    L3          idx
##      <dbl>   <dbl> <dbl> <dbl> <dbl>        <dbl>
##  1 1588364 4278354    14    27     1 3.248444e-04
##  2 1588365 4278354    14    27     1 1.952405e+00
##  3 1588362 4278353    14    27     1 2.492340e+00
##  4 1588355 4278356    15    27     1 1.100216e+01
##  5 1588355 4278356    15    27     1 1.100216e+01
##  6 1588371 4278350    14    27     1 1.119485e+01
##  7 1588355 4278357    15    27     1 1.147376e+01
##  8 1588372 4278349    14    27     1 1.289806e+01
##  9 1588372 4278349    14    27     1 1.289806e+01
## 10 1588350 4278359    15    27     1 1.877189e+01
## # ... with 33,389 more rows
plot(p2[[27]][[14]])
plot(p2, add = T, col = "grey")
points(p2[[27]][[14]])
plot(p1, add = TRUE, lty = 2)

abline(v = pt[1], h = pt[2])

devtools::session_info()
## ─ Session info ──────────────────────────────────────────────────────────
##  setting  value                       
##  version  R version 3.4.3 (2017-11-30)
##  os       Debian GNU/Linux 9 (stretch)
##  system   x86_64, linux-gnu           
##  ui       X11                         
##  language (EN)                        
##  collate  en_US.UTF-8                 
##  tz       Australia/Tasmania          
##  date     2017-12-24                  
## 
## ─ Packages ──────────────────────────────────────────────────────────────
##  package     * version     date       source                            
##  assertthat    0.2.0       2017-04-11 CRAN (R 3.4.0)                    
##  backports     1.1.2       2017-12-13 CRAN (R 3.4.3)                    
##  bindr         0.1         2016-11-13 CRAN (R 3.4.0)                    
##  bindrcpp    * 0.2         2017-06-17 CRAN (R 3.4.0)                    
##  class         7.3-14      2015-08-30 CRAN (R 3.4.0)                    
##  classInt      0.1-24      2017-04-16 CRAN (R 3.4.3)                    
##  cli           1.0.0       2017-12-13 Github (r-lib/cli@ab1c3aa)        
##  clisymbols    1.2.0       2017-05-21 CRAN (R 3.4.1)                    
##  crayon        1.3.4       2017-09-16 CRAN (R 3.4.1)                    
##  DBI           0.7         2017-06-18 CRAN (R 3.4.3)                    
##  desc          1.1.1       2017-08-03 CRAN (R 3.4.1)                    
##  devtools      1.13.3.9000 2017-12-22 Github (hadley/devtools@0bcfd6e)  
##  digest        0.6.13      2017-12-14 CRAN (R 3.4.3)                    
##  dplyr       * 0.7.4.9000  2017-12-21 Github (tidyverse/dplyr@c04deb3)  
##  e1071         1.6-8       2017-02-02 CRAN (R 3.4.3)                    
##  evaluate      0.10.1      2017-06-24 CRAN (R 3.4.0)                    
##  glue          1.2.0       2017-10-29 CRAN (R 3.4.2)                    
##  htmltools     0.3.6       2017-04-28 CRAN (R 3.4.0)                    
##  knitr         1.17        2017-08-10 CRAN (R 3.4.1)                    
##  magrittr      1.5         2014-11-22 CRAN (R 3.4.3)                    
##  memoise       1.1.0       2017-04-21 CRAN (R 3.4.0)                    
##  pkgbuild      0.0.0.9000  2017-12-04 Github (r-pkgs/pkgbuild@ce7f6d1)  
##  pkgconfig     2.0.1       2017-03-21 CRAN (R 3.4.0)                    
##  pkgload       0.0.0.9000  2017-11-02 Github (r-lib/pkgload@70eaef8)    
##  purrr         0.2.4       2017-10-18 CRAN (R 3.4.2)                    
##  R6            2.2.2       2017-06-17 CRAN (R 3.4.0)                    
##  Rcpp          0.12.14     2017-11-23 CRAN (R 3.4.3)                    
##  rlang         0.1.4.9000  2017-12-15 Github (tidyverse/rlang@cc7587c)  
##  rmarkdown     1.8         2017-11-17 CRAN (R 3.4.2)                    
##  rprojroot     1.3-1       2017-12-18 CRAN (R 3.4.3)                    
##  sessioninfo   1.0.1.9000  2017-12-13 Github (r-lib/sessioninfo@c871d01)
##  sf          * 0.5-6       2017-12-23 Github (r-spatial/sf@8575ca4)     
##  stringi       1.1.6       2017-11-17 CRAN (R 3.4.3)                    
##  stringr       1.2.0       2017-02-18 CRAN (R 3.4.0)                    
##  testthat      2.0.0.9000  2017-12-22 Github (hadley/testthat@eda2d54)  
##  tibble        1.3.4       2017-08-22 CRAN (R 3.4.1)                    
##  tidyselect    0.2.3       2017-11-06 CRAN (R 3.4.2)                    
##  udunits2      0.13        2016-11-17 CRAN (R 3.4.3)                    
##  units         0.4-6       2017-08-27 CRAN (R 3.4.3)                    
##  usethis       1.1.0.9000  2017-12-23 Github (r-lib/usethis@973bcab)    
##  withr         2.1.1       2017-12-19 CRAN (R 3.4.3)