Skip to content

Generic for st_drop_geometry() #1914

@henningte

Description

@henningte

I wanted to ask if you think it would make sense to implement st_drop_geometry() as a generic function.

A potential use case where this would be useful is when someone wants to create a subclass to the sf class, as e.g. in the sftime package.

The problem with the current implementation for st_drop_geometry() is that it will drop the geometry column and class attribute, but not the subclass attribute. For example, for sftime objects:

library(sf)
#> Warning: package 'sf' was built under R version 4.0.5
#> Linking to GEOS 3.9.1, GDAL 3.2.1, PROJ 7.2.1
library(sftime)

# example sfc object
x_sfc <- 
  sf::st_sfc(
    sf::st_point(1:2), 
    sf::st_point(c(1,3)), 
    sf::st_point(2:3), 
    sf::st_point(c(2,1))
  )

# create an sftime object directly from x_sfc
x_sftime1 <- sftime::st_sftime(a = 1:4, x_sfc, time = Sys.time()- 0:3 * 3600 * 24)

# trying to drop the geometry column returns an error (when printing):
st_drop_geometry(x_sftime1)
#> Error in st_agr.default(x): all(is.na(x)) is not TRUE

# ... because only the sf class is removed, but not the sftime class:
class(st_drop_geometry(x_sftime1))
#> [1] "sftime"     "data.frame"

Created on 2022-03-04 by the reprex package (v2.0.1)

It would be easier to handle this with a method than creating a function with exactly the same name.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions