R: SpatialPointsDataFrame code no longer working. Error in !res[[1]] : invalid argument type
Asked Answered
C

2

8

I have been following this workflow to convert coordinates from Eastings / Northings to Latitude / Longitude in R. Up until today it has been working fine. Here is a reproducible example:

require(rgdal)
# create test coordinates
x <- 259269 y <- 074728

# create test dataframe 
dat <- data.frame(x, y) 
class(dat) # "data.frame"

### shortcuts 
ukgrid <- "+init=epsg:27700" 
latlong <- "+init=epsg:4326"

### Create coordinates object 
coords <- cbind(Easting = as.numeric(as.character(x)),
                Northing = as.numeric(as.character(y)))
class(coords) # matrix
dat_SP <- SpatialPointsDataFrame(coords,
                              data = dat,
                              proj4string = CRS("+init=epsg:27700"))

# Error in !res[[1]] : invalid argument type

# Following steps ----

# Convert
dat_SP_LL <- spTransform(dat_SP, CRS(latlong)

# replace Lat, Long
dat_SP_LL@data$Long <- coordinates(dat_SP_LL)[, 1]
dat_SP_LL@data$Lat <- coordinates(dat_SP_LL)[, 2]

I think this may be related to the proj4string argument, but have been unable to resolve it. Any help is appreciated.

My session info:

> sessionInfo()
R version 3.6.1 (2019-07-05)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 18362)

Matrix products: default

locale:
[1] LC_COLLATE=English_United Kingdom.1252  LC_CTYPE=English_United Kingdom.1252   
[3] LC_MONETARY=English_United Kingdom.1252 LC_NUMERIC=C                           
[5] LC_TIME=English_United Kingdom.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
 [1] forcats_0.5.0      stringr_1.4.0      dplyr_0.8.3        purrr_0.3.3       
 [5] readr_1.3.1        tibble_3.0.1       tidyverse_1.3.0    ggspatial_1.1.2   
 [9] tmap_3.0           rnrfa_2.0.3        gdalUtils_2.0.3.2  zoon_0.6.5        
[13] biomod2_3.4.6      sdm_1.0-89         SDMTools_1.1-221.1 SSDM_0.2.8        
[17] odbc_1.2.2         DBI_1.1.0          rgeos_0.5-3        rgdal_1.5-8       
[21] tidyr_1.1.0        ggplot2_3.3.1      knitr_1.25         raster_3.0-7      
[25] sp_1.3-1          
Childish answered 1/6, 2020 at 17:17 Comment(0)
H
8

I encountered the same problem. The bug is related to sp::CRS. I solved it with a re-intallation of the 'sp' package.

Hypothyroidism answered 4/6, 2020 at 5:41 Comment(1)
I reinstalled various spatial packages including sp and it does seem to have done the trick. Thanks. Possibly the older versions of sp are no longer supported?Childish
I
0

I am having the same problem. It comes from the CRS function. If you look at the function it comes from line 34 (I marked with asterisks in code below), but I don't know how to fix it. It might be a bug. I mainly wrote this "answer" to draw more attention and I don't have the ability to comment.

Edit: You can set the doCheckCRSArgs = F in the CRS function, but still get a error when I try to spTransform. source crs creation failed: generic error of unknown origin

function (projargs = NA_character_, doCheckCRSArgs = TRUE) 
{
  if (!is.na(projargs) && !nzchar(projargs)) 
    projargs <- NA_character_
  stopifnot(is.logical(doCheckCRSArgs))
  stopifnot(length(doCheckCRSArgs) == 1L)
  stopifnot(is.character(projargs))
  if (!is.na(projargs)) {
    if (length(grep("^[ ]*\\+", projargs)) == 0) 
      stop(paste("PROJ4 argument-value pairs must begin with +:", 
        projargs))
  }
  if (!is.na(projargs)) {
    if (length(grep("latlon", projargs)) != 0) 
      stop("northings must follow eastings: ", projargs)
    if (length(grep("lonlat", projargs)) != 0) {
      projargs <- sub("lon", "long", projargs)
      warning("'lonlat' changed to 'longlat': ", projargs)
    }
  }
  if (is.na(projargs)) 
    uprojargs <- projargs
  else uprojargs <- paste(unique(unlist(strsplit(projargs, 
    " "))), collapse = " ")
  if (length(grep("= ", uprojargs)) != 0) 
    stop(paste("No spaces permitted in PROJ4 argument-value pairs:", 
      uprojargs))
  if (length(grep(" [:alnum:]", uprojargs)) != 0) 
    stop(paste("PROJ4 argument-value pairs must begin with +:", 
      uprojargs))
  if (doCheckCRSArgs) {
    if (!is.na(uprojargs) && requireNamespace("rgdal", quietly = TRUE)) {
      res <- rgdal::checkCRSArgs(uprojargs)
      ********if (!res[[1]])*********
        stop(res[[2]])
      uprojargs <- res[[2]]
    }
  }
  res <- new("CRS", projargs = uprojargs)
  res
}
Irrespirable answered 3/6, 2020 at 19:31 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.