首页 > 解决方案 > 如何从`sf::st_layers()`中提取层的名称?

问题描述

我想用 R {sf} 包提取 shapefile 的图层名称。

我试图从中提取信息sf::st_layers()。我看了看,sf::st_read()但我看不到它是如何获得图层名称的。

st_layers(dsn = system.file("shapes/sids.shp", package = "spData") )
>> Driver: ESRI Shapefile 
>> Available layers:
>>  layer_name geometry_type features fields
>>    1       sids       Polygon      100     22

我试图强制使用数据框或小标题,但这是不可能的:

Error in as.data.frame.default(value, stringsAsFactors = FALSE) : 
  cannot coerce class ‘"sf_layers"’ to a data.frame

我也试过st_layers(dsn = system.file("shapes/sids.shp", package = "spData") ) %>% .[["layer_name"]]了,得到NULL

标签: rsf

解决方案


层的名称存储在由name返回的对象的列中st_layers,您可以看到使用以下方法分析其结构str

str(st_layers(dsn = system.file("shapes/sids.shp", package = "spData")))

List of 5
 $ name    : chr "sids"
 $ geomtype:List of 1
  ..$ : chr "Polygon"
 $ driver  : chr "ESRI Shapefile"
 $ features: num 100
 $ fields  : num 22
 - attr(*, "class")= chr "sf_layers"

因此,使用

st_layers(dsn = system.file("shapes/sids.shp", package = "spData"))$name

应该给你可用层的名称。


推荐阅读