Problems with writing dataframe to ESRI shapefile

I'm hoping anyone can help me with a pretty straightforward request involving RStudio code that has given me no problems until recently. I have a csv file related to a shapefile of data I've been working with for months. I've used RStudio to clean a long series of csv files which have had a geometry column of GPS coordinates that has, in the past, made my workflow easy to write to a shapefile with the writeOGR function.

For the past week, this function has outputted no shapefile however an error message : "inherits(obj, "Spatial") is not TRUE". Current on-line results for a search of this error message are not helpful or too opaque. As I've said before, the writeOGR function has worked smoothly before and I would greatly appreciate a tangible aid.

My suggestion would be to go back to basics.. consult the documentation for a most basic example of use of the function that is failing for you. In this way, either 1) the function will throw an error that reveals a fault in the package install you have or its integration with other packages in the r environment or even system utilities relied upon. Or 2) there has been some change in your own code that took you from a working code to one which errors.

I paste here the examples included in the docs for your convenience

set_thin_PROJ6_warnings(TRUE)
cities <- readOGR(system.file("vectors", package = "rgdal")[1], "cities")#> OGR data source with driver: ESRI Shapefile 
#> Source: "/tmp/RtmpKX7V7q/temp_libpathbee5e280a0c/rgdal/vectors", layer: "cities"
#> with 606 features
#> It has 4 fields
#> Integer64 fields read as strings:  POPULATION is.na(cities$POPULATION) <- cities$POPULATION == -99
summary(cities$POPULATION)#>  1270000  1550000  1140000  1190000  1225000  1250000  1300000  1400000 
#>        5        4        3        3        3        3        3        3 
#>  1600000  2050000   320000   600000   700000   800000  1025000  1060000 
#>        3        3        3        3        3        3        2        2 
#>  1100000 11100000  1170000  1185000  1325000  1460000  1500000  1525000 
#>        2        2        2        2        2        2        2        2 
#>  1800000   185000  1875000   203000  2250000  2325000  2400000  2950000 
#>        2        2        2        2        2        2        2        2 
#>  3025000   310000  3800000   400000   465000   535000   625000  6450000 
#>        2        2        2        2        2        2        2        2 
#>   670000   675000   770000   890000  9300000   960000   100000  1005000 
#>        2        2        2        2        2        2        1        1 
#>  1010000     1012 10150000  1020000  1024940  1029731  1030000  1037700 
#>        1        1        1        1        1        1        1        1 
#>  1040000  1045000  1050000  1055000  1061000   106416  1065000  1069727 
#>        1        1        1        1        1        1        1        1 
#>  1070000 10750000  1088624   109000   109382   109486   110153  1104209 
#>        1        1        1        1        1        1        1        1 
#>  1110000   111914  1120000  1144000   114500  1149401  1150000   116000 
#>        1        1        1        1        1        1        1        1 
#>  1160000  1165000  1175000    11753  1179000    12000   120000  1200000 
#>        1        1        1        1        1        1        1        1 
#>  1205000   121265  1216000  1227200    12426   124400   125263  1255000 
#>        1        1        1        1        1        1        1        1 
#>  1272400  1275000  (Other)     NA's 
#>        1        1      415       30 td <- file.path(tempdir(), "rgdal_examples"); dir.create(td)
# BDR 2016-12-15 (MapInfo driver fails writing to directory with ".")
if(nchar(Sys.getenv("OSGEO4W_ROOT")) > 0) {
    OLDPWD <- getwd()
    setwd(td)
    td <- "."
}
writeOGR(cities, td, "cities", driver="ESRI Shapefile")
try(writeOGR(cities, td, "cities", driver="ESRI Shapefile"))#> Error in writeOGR(cities, td, "cities", driver = "ESRI Shapefile") : 
#>   layer exists, use a new layer namewriteOGR(cities, td, "cities", driver="ESRI Shapefile", overwrite_layer=TRUE)
cities2 <- readOGR(td, "cities")#> OGR data source with driver: ESRI Shapefile 
#> Source: "/tmp/RtmpfdN0rB/rgdal_examples", layer: "cities"
#> with 606 features
#> It has 4 fieldssummary(cities2$POPULATION)#>  1270000  1550000  1140000  1190000  1225000  1250000  1300000  1400000 
#>        5        4        3        3        3        3        3        3 
#>  1600000  2050000   320000   600000   700000   800000  1025000  1060000 
#>        3        3        3        3        3        3        2        2 
#>  1100000 11100000  1170000  1185000  1325000  1460000  1500000  1525000 
#>        2        2        2        2        2        2        2        2 
#>  1800000   185000  1875000   203000  2250000  2325000  2400000  2950000 
#>        2        2        2        2        2        2        2        2 
#>  3025000   310000  3800000   400000   465000   535000   625000  6450000 
#>        2        2        2        2        2        2        2        2 
#>   670000   675000   770000   890000  9300000   960000   100000  1005000 
#>        2        2        2        2        2        2        1        1 
#>  1010000     1012 10150000  1020000  1024940  1029731  1030000  1037700 
#>        1        1        1        1        1        1        1        1 
#>  1040000  1045000  1050000  1055000  1061000   106416  1065000  1069727 
#>        1        1        1        1        1        1        1        1 
#>  1070000 10750000  1088624   109000   109382   109486   110153  1104209 
#>        1        1        1        1        1        1        1        1 
#>  1110000   111914  1120000  1144000   114500  1149401  1150000   116000 
#>        1        1        1        1        1        1        1        1 
#>  1160000  1165000  1175000    11753  1179000    12000   120000  1200000 
#>        1        1        1        1        1        1        1        1 
#>  1205000   121265  1216000  1227200    12426   124400   125263  1255000 
#>        1        1        1        1        1        1        1        1 
#>  1272400  1275000  (Other)     NA's 
#>        1        1      415       30 if ("SQLite" %in% ogrDrivers()$name) {
  tf <- tempfile()
  try(writeOGR(cities, tf, "cities", driver="SQLite", layer_options="LAUNDER=NO"))
}
if ("GeoJSON" %in% ogrDrivers()$name) {
  js <- '{
    "type": "MultiPolygon",
    "coordinates": [[[[102.0, 2.0], [103.0, 2.0], [103.0, 3.0], [102.0, 3.0],
    [102.0, 2.0]]], [[[100.0, 0.0], [101.0, 0.0], [101.0, 1.0], [100.0, 1.0],
    [100.0, 0.0]]]]
  }'
  spdf <- readOGR(js, layer='OGRGeoJSON')
  in1_comms <- sapply(slot(spdf, "polygons"), comment)
  print(in1_comms)
  tf <- tempfile()
  writeOGR(spdf, tf, "GeoJSON", driver="GeoJSON")
  #spdf1 <- readOGR(tf, "GeoJSON")
  spdf1 <- readOGR(tf)
  in2_comms <- sapply(slot(spdf1, "polygons"), comment)
  print(in2_comms)
  print(isTRUE(all.equal(in1_comms, in2_comms)))
}#> OGR data source with driver: GeoJSON 
#> Source: "{
#>     "type": "MultiPolygon",
#>     "coordinates": [[[[102.0, 2.0], [103.0, 2.0], [103.0, 3.0], [102.0, 3.0],
#>     [102.0, 2.0]]], [[[100.0, 0.0], [101.0, 0.0], [101.0, 1.0], [100.0, 1.0],
#>     [100.0, 0.0]]]]
#>   }", layer: "OGRGeoJSON"
#> with 1 features
#> It has 0 fields
#> [1] "0 0"
#> OGR data source with driver: GeoJSON 
#> Source: "/tmp/RtmpfdN0rB/filec2503c2ac94", layer: "GeoJSON"
#> with 1 features
#> It has 1 fields
#> [1] "0 0"
#> [1] TRUEif (FALSE) if ("GML" %in% ogrDrivers()$name) {
  airports <- try(readOGR(system.file("vectors/airports.gml",
    package = "rgdal")[1], "airports"))
  if (class(airports) != "try-error") {
    writeOGR(cities, paste(td, "cities.gml", sep="/"), "cities", driver="GML")
    cities3 <- readOGR(paste(td, "cities.gml", sep="/"), "cities")
  }
}
# The GML driver does not support coordinate reference systems
if ("KML" %in% ogrDrivers()$name) {
  data(meuse)
  coordinates(meuse) <- c("x", "y")
  proj4string(meuse) <- CRS("+init=epsg:28992")
  meuse_ll <- spTransform(meuse, CRS("+proj=longlat +datum=WGS84"))
  writeOGR(meuse_ll["zinc"], paste(td, "meuse.kml", sep="/"), "zinc", "KML")
}
list.files(td)#> [1] "cities.dbf" "cities.prj" "cities.shp" "cities.shx" "meuse.kml" roads <- readOGR(system.file("vectors", package = "rgdal")[1],
 "kiritimati_primary_roads")#> OGR data source with driver: ESRI Shapefile 
#> Source: "/tmp/RtmpKX7V7q/temp_libpathbee5e280a0c/rgdal/vectors", layer: "kiritimati_primary_roads"
#> with 35 features
#> It has 1 fieldssummary(roads)#> Object of class SpatialLinesDataFrame
#> Coordinates:
#>        min      max
#> x 667587.7 704048.0
#> y 187716.6 226051.2
#> Is projected: TRUE 
#> proj4string :
#> [+proj=utm +zone=4 +datum=WGS84 +units=m +no_defs]
#> Data attributes:
#>        Id   
#>  Min.   :0  
#>  1st Qu.:0  
#>  Median :0  
#>  Mean   :0  
#>  3rd Qu.:0  
#>  Max.   :0  if (strsplit(getGDALVersionInfo(), " ")[[1]][2] < "2") {
# For GDAL >= 2, the TAB driver may need a BOUNDS layer option
  writeOGR(roads, td, "roads", driver="MapInfo File")
  roads2 <- readOGR(paste(td, "roads.tab", sep="/"), "roads")
  summary(roads2)
}
scot_BNG <- readOGR(system.file("vectors", package = "rgdal")[1], "scot_BNG")#> OGR data source with driver: ESRI Shapefile 
#> Source: "/tmp/RtmpKX7V7q/temp_libpathbee5e280a0c/rgdal/vectors", layer: "scot_BNG"
#> with 56 features
#> It has 13 fieldssummary(scot_BNG)#> Object of class SpatialPolygonsDataFrame
#> Coordinates:
#>          min       max
#> x   7094.552  468285.5
#> y 529495.039 1218342.5
#> Is projected: TRUE 
#> proj4string :
#> [+proj=tmerc +lat_0=49 +lon_0=-2 +k=0.9996012717 +x_0=400000
#> +y_0=-100000 +ellps=airy +units=m +no_defs]
#> Data attributes:
#>      SP_ID              NAME         ID_x           COUNT       
#>  0      : 1   Aberdeen    : 1   Min.   : 1.00   Min.   : 0.000  
#>  1      : 1   Angus       : 1   1st Qu.:14.75   1st Qu.: 4.750  
#>  10     : 1   Annandale   : 1   Median :28.50   Median : 8.000  
#>  11     : 1   Argyll-Bute : 1   Mean   :28.50   Mean   : 9.571  
#>  12     : 1   Banff-Buchan: 1   3rd Qu.:42.25   3rd Qu.:11.000  
#>  13     : 1   Bearsden    : 1   Max.   :56.00   Max.   :39.000  
#>  (Other):50   (Other)     :50                                   
#>       SMR             LONG            LAT              PY         
#>  Min.   :  0.0   Min.   :54.94   Min.   :1.430   Min.   :  27075  
#>  1st Qu.: 49.6   1st Qu.:55.78   1st Qu.:3.288   1st Qu.: 100559  
#>  Median :111.5   Median :56.04   Median :4.090   Median : 182333  
#>  Mean   :152.6   Mean   :56.40   Mean   :4.012   Mean   : 267498  
#>  3rd Qu.:223.0   3rd Qu.:57.02   3rd Qu.:4.730   3rd Qu.: 313845  
#>  Max.   :652.2   Max.   :60.24   Max.   :6.800   Max.   :2316353  
#>                                                                   
#>       EXP_             AFF             X_COOR           Y_COOR       
#>  Min.   : 1.100   Min.   : 0.000   Min.   :112892   Min.   : 561163  
#>  1st Qu.: 4.050   1st Qu.: 1.000   1st Qu.:256624   1st Qu.: 649520  
#>  Median : 6.300   Median : 7.000   Median :287577   Median : 681524  
#>  Mean   : 9.575   Mean   : 8.661   Mean   :288524   Mean   : 723127  
#>  3rd Qu.:10.125   3rd Qu.:11.500   3rd Qu.:333948   3rd Qu.: 794380  
#>  Max.   :88.700   Max.   :24.000   Max.   :442244   Max.   :1168904  
#>                                                                      
#>       ID_y      
#>  Min.   : 1.00  
#>  1st Qu.:14.75  
#>  Median :28.50  
#>  Mean   :28.50  
#>  3rd Qu.:42.25  
#>  Max.   :56.00  
#>                 if (strsplit(getGDALVersionInfo(), " ")[[1]][2] < "2") {
# For GDAL >= 2, the TAB driver may need a BOUNDS layer option
  writeOGR(scot_BNG, td, "scot_BNG", driver="MapInfo File")
  list.files(td)
  scot_BNG2 <- readOGR(paste(td, "scot_BNG.tab", sep="/"), "scot_BNG",
    addCommentsToPolygons=FALSE)
  summary(scot_BNG2)
}
writeOGR(scot_BNG, td, "scot_BNG", driver="MapInfo File",
 dataset_options="FORMAT=MIF")
list.files(td)#> [1] "cities.dbf"   "cities.prj"   "cities.shp"   "cities.shx"   "meuse.kml"   
#> [6] "scot_BNG.mid" "scot_BNG.mif"scot_BNG3 <- readOGR(paste(td, "scot_BNG.mif", sep="/"), "scot_BNG")#> OGR data source with driver: MapInfo File 
#> Source: "/tmp/RtmpfdN0rB/rgdal_examples/scot_BNG.mif", layer: "scot_BNG"
#> with 56 features
#> It has 13 fieldssummary(scot_BNG3)#> Object of class SpatialPolygonsDataFrame
#> Coordinates:
#>          min       max
#> x   7094.552  468285.5
#> y 529495.039 1218342.5
#> Is projected: TRUE 
#> proj4string :
#> [+proj=tmerc +lat_0=49 +lon_0=-2 +k=0.9996012717 +x_0=400000
#> +y_0=-100000 +ellps=airy +units=m +no_defs]
#> Data attributes:
#>      SP_ID              NAME         ID_x           COUNT       
#>  0      : 1   Aberdeen    : 1   Min.   : 1.00   Min.   : 0.000  
#>  1      : 1   Angus       : 1   1st Qu.:14.75   1st Qu.: 4.750  
#>  10     : 1   Annandale   : 1   Median :28.50   Median : 8.000  
#>  11     : 1   Argyll-Bute : 1   Mean   :28.50   Mean   : 9.571  
#>  12     : 1   Banff-Buchan: 1   3rd Qu.:42.25   3rd Qu.:11.000  
#>  13     : 1   Bearsden    : 1   Max.   :56.00   Max.   :39.000  
#>  (Other):50   (Other)     :50                                   
#>       SMR             LONG            LAT              PY         
#>  Min.   :  0.0   Min.   :54.94   Min.   :1.430   Min.   :  27075  
#>  1st Qu.: 49.6   1st Qu.:55.78   1st Qu.:3.288   1st Qu.: 100559  
#>  Median :111.5   Median :56.04   Median :4.090   Median : 182333  
#>  Mean   :152.6   Mean   :56.40   Mean   :4.012   Mean   : 267498  
#>  3rd Qu.:223.0   3rd Qu.:57.02   3rd Qu.:4.730   3rd Qu.: 313845  
#>  Max.   :652.2   Max.   :60.24   Max.   :6.800   Max.   :2316353  
#>                                                                   
#>       EXP_             AFF             X_COOR           Y_COOR       
#>  Min.   : 1.100   Min.   : 0.000   Min.   :112892   Min.   : 561163  
#>  1st Qu.: 4.050   1st Qu.: 1.000   1st Qu.:256624   1st Qu.: 649520  
#>  Median : 6.300   Median : 7.000   Median :287577   Median : 681524  
#>  Mean   : 9.575   Mean   : 8.661   Mean   :288524   Mean   : 723127  
#>  3rd Qu.:10.125   3rd Qu.:11.500   3rd Qu.:333948   3rd Qu.: 794380  
#>  Max.   :88.700   Max.   :24.000   Max.   :442244   Max.   :1168904  
#>                                                                      
#>       ID_y      
#>  Min.   : 1.00  
#>  1st Qu.:14.75  
#>  Median :28.50  
#>  Mean   :28.50  
#>  3rd Qu.:42.25  
#>  Max.   :56.00  
#>                 if(nchar(Sys.getenv("OSGEO4W_ROOT")) > 0) {
    setwd(OLDPWD)
}

Class "Spatial" refers to the old & weary {sp} package; it seems you are now using format of the shiny & new {sf} package (note that both {sp} and {sf} have the same author, Edzer Pebesma, to whom we all owe a lot).

To double check consider running class() on your object; if my guess is correct it should return something like "sf" "data.frame", where sf is the key output.

You have in principle two options:

  • continue using rgdal::writeOGR() after applying as(x, "Spatial") to your object (where x is your object); this will convert your object from new to old package format
  • write the shapefile using sf::st_write() function; this will accept the newer package format

As the {sp} package is on its way out, after a long and productive life, and the {sf} is the new cool kid I suggest the second option.

OK thank you for the response. This is interesting and very relevant but this suggestion of an answer only yields more questions.

This is how RStudio interpreted the change to my code based on your insight.

> #The colClasses function keeps in necessary leading zeroes when read from Excel to R program
> OMAR_RoofFanCodes <- read.csv("H:/NYCHA_Analysis/OMAR_MaximoRF_Reconciliation/OMAR_RoofFanCode1.29.2020.csv", colClasses= c(LOCATIO = "character"))
There were 12 warnings (use warnings() to see them)
> class(OMAR_RoofFanCodes)
[1] "data.frame"
> sf::st_write(OMAR_RoofFanCodes, "OMAR_RoofFancodes.shp", driver = "ESRI Shapefile")
Error in st_sf(x, ..., agr = agr, sf_column_name = sf_column_name) : 
  no simple features geometry column present

I spent a bit of time today researching how to import csv files as a sf object and how to convert my column of GPS coordinates into a readable geometry column for these purposes to no avail.

Thank you in advance for your time and effort

Curiouser and curiouser!

What type of geometry is your data? Points or polygons?

If it is points (as I expect) you will need to pipe the result of the read.csv() function to sf::st_as_sf() function - consider this example: Issues with writing a dataframe to a shapefile (no need for the sf::st_transform(); I was just showing off...)

Should you be using st_read in sf to read in the csv and specify the geometric fields?

In that example I imagine that you haven't specified the coordinates, therefore no geometry columns when you are trying to use st_write.

https://www.rdocumentation.org/packages/sf/versions/0.8-0/topics/st_read

or using st_as_sf as shown here:

http://pierreroudier.github.io/teaching/20170626-Pedometrics/20170626-soil-data.html

Yes this is point geometry, as you expect. I'm unclear on how to pipe the result of the read.csv() function. I've consulted the hyperlink of R documentation on how to use the sf::st_as_sf() function but I wasn't able to yield much better results.

You will see that I've made progress but I'm still getting an error citing no "simple features geometry column present".

> #The colClasses parameter of this function keeps in necessary leading zeroes when read from Excel to R program
> OMAR_RoofFanCodes3 <- read.csv("H:/NYCHA_Analysis/OMAR_MaximoRF_Reconciliation/OMAR_RoofFanCode1.29.2020.csv", colClasses= c(LOCATIO = "character"))
> #Apply the class function to each variable of the dataset simultaneously
> sapply(OMAR_RoofFanCodes3, class)
         NO     BOROUGH       DVLMT    BLDG_NUM     LOCATIO  Bldg_RF_CT  RoofVentID   Longitude    Latitude 
  "integer"    "factor"    "factor"    "factor" "character"   "integer"    "factor"   "numeric"   "numeric" 
   geometry 
   "factor" 
> glimpse(OMAR_RoofFanCodes3)
Observations: 9,540
Variables: 10
$ NO         <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, ...
$ BOROUGH    <fct> BROOKLYN, BROOKLYN, MANHATTAN, MANHATTAN, MANHATTAN, MANHATTAN, MANHATTAN, MANHATTAN, M...
$ DVLMT      <fct> WILLIAMSBURG, WILLIAMSBURG, EAST RIVER, ELLIOTT, ELLIOTT, ELLIOTT, ELLIOTT, ELLIOTT, EL...
$ BLDG_NUM   <fct> 21, 21, 1, 1, 1, 2, 2, 3, 3, 4, 4, 1, 3, 6, 8, 9, 10, 12, 14, 17, 19, 20, 22, 25, 27, 8...
$ LOCATIO    <chr> "2021", "2021", "9001", "15001", "15001", "15002", "15002", "15003", "15003", "15004", ...
$ Bldg_RF_CT <int> 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, ...
$ RoofVentID <fct> 002.21.01, 002.21.02, 009.01.01, 015.01.01, 015.01.02, 015.02.01, 015.02.02, 015.03.01,...
$ Longitude  <dbl> -73.94395, -73.94396, -73.94032, -74.00208, -74.00206, -74.00267, -74.00266, -74.00211,...
$ Latitude   <dbl> 40.70940, 40.70940, 40.78838, 40.74981, 40.74971, 40.74911, 40.74914, 40.74887, 40.7489...
$ geometry   <fct> "-73.9439472338482, 40.709396333482", "-73.9439644487238, 40.7094003293267", "-73.94032...
> OMAR_RoofFanCodes3 %>%
+   st_as_sf(coords= c("x"= "Longitude", "y"= "Latitude"), crs = 4326)
Simple feature collection with 9540 features and 7 fields
geometry type:  POINT
dimension:      XY
bbox:           xmin: -74.16494 ymin: 40.57183 xmax: -73.75014 ymax: 40.88714
epsg (SRID):    4326
proj4string:    +proj=longlat +datum=WGS84 +no_defs
First 10 features:
   NO   BOROUGH        DVLMT BLDG_NUM LOCATIO Bldg_RF_CT RoofVentID                   geometry
1   1  BROOKLYN WILLIAMSBURG       21    2021          2  002.21.01  POINT (-73.94395 40.7094)
2   2  BROOKLYN WILLIAMSBURG       21    2021          2  002.21.02  POINT (-73.94396 40.7094)
3   3 MANHATTAN   EAST RIVER        1    9001          1  009.01.01 POINT (-73.94032 40.78838)
4   4 MANHATTAN      ELLIOTT        1   15001          2  015.01.01 POINT (-74.00208 40.74981)
5   5 MANHATTAN      ELLIOTT        1   15001          2  015.01.02 POINT (-74.00206 40.74971)
6   6 MANHATTAN      ELLIOTT        2   15002          2  015.02.01 POINT (-74.00267 40.74911)
7   7 MANHATTAN      ELLIOTT        2   15002          2  015.02.02 POINT (-74.00266 40.74914)
8   8 MANHATTAN      ELLIOTT        3   15003          2  015.03.01 POINT (-74.00211 40.74887)
9   9 MANHATTAN      ELLIOTT        3   15003          2  015.03.02   POINT (-74.0021 40.7489)
10 10 MANHATTAN      ELLIOTT        4   15004          2  015.04.01 POINT (-74.00115 40.74926)
> View(OMAR_RoofFanCodes3)
> st_write(OMAR_RoofFanCodes3, "NYCHA_RoofFans.shp")
Error in st_sf(x, ..., agr = agr, sf_column_name = sf_column_name) : 
  no simple features geometry column present

You have applied sf::st_as_sf() to your object, but you seem not to have actually saved it (just printed it out)

Would something like this work for your data?

OMAR_RoofFanCodes3 <- read.csv("H:/NYCHA_Analysis/OMAR_MaximoRF_Reconciliation/OMAR_RoofFanCode1.29.2020.csv", colClasses= c(LOCATIO = "character")) %>%
   st_as_sf(coords= c("x"= "Longitude", "y"= "Latitude"), crs = 4326)

st_write(OMAR_RoofFanCodes3, "NYCHA_RoofFans.shp")
1 Like

Yes, that did the trick. Exactly what I needed! Thank you and bravo! I can really get used to this community! I'm looking forward to the day I'm half as effective as you in order to pay it forward.

1 Like

Thank you for your kind words, you are making me blush :blush:

If your question was answered, would you mind marking it so? This would help others facing the same issue in the future.

You're very welcome.
I will love to mark it so. I'm still new so thanks for updating me on protocol.

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.