You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用st_write()与write_sf()导出sf对象为Shapefile遇写入错误求助

导出sf对象为ESRI Shapefile时的写入错误分析

尝试用st_write()和write_sf()导出sf对象为Shapefile时均报错,相关代码及报错信息如下:

1. 第一次调用st_write()的报错

> st_write(twitter_data_sf, "Data/twt.shp", append=F)
Deleting layer `twt' using driver `ESRI Shapefile'
Writing layer `twt' to data source `Data/twt.shp' using driver `ESRI Shapefile'
Updating existing layer twt
Writing 68077 features with 29 fields and geometry type Point.
Unknown field name `epoch': updating a layer with improper field name(s)?
Error: Write error
In addition: Warning message:
In abbreviate_shapefile_names(obj) :
  Field names abbreviated for ESRI Shapefile driver

2. 第一次调用write_sf()的报错

> write_sf(twitter_data_sf,"PT14.shp", driver = "ESRI Shapefile", overwrite_layer = TRUE)
Unknown field name `in_rply_t_st_': updating a layer with improper field name(s)?
Error: Write error
In addition: Warning messages:
1: In abbreviate_shapefile_names(obj) :
  Field names abbreviated for ESRI Shapefile driver
2: In CPL_write_ogr(obj, dsn, layer, driver, as.character(dataset_options),  :
  GDAL Message 6: Normalized/laundered field name: 'in_rply_t_st_' to 'in_rply_t_'
3: In CPL_write_ogr(obj, dsn, layer, driver, as.character(dataset_options),  :
  GDAL Message 6: Normalized/laundered field name: 'in_rply_t_sr_' to 'in_rply__1'

3. 第二次调用st_write()的报错

> st_write(twitter_data_sf, "Data/twt.shp", append=F)

Error: Write error

4. 第二次调用write_sf()的报错

> write_sf(twitter_data_sf,"PT14.shp", driver = "ESRI Shapefile", overwrite_layer = TRUE)
Unknown field name `in_rply_t_st_': updating a layer with improper field name(s)?
Error: Write error
In addition: Warning messages:
1: In abbreviate_shapefile_names(obj) :
  Field names abbreviated for ESRI Shapefile driver
2: In CPL_write_ogr(obj, dsn, layer, driver, as.character(dataset_options),  :
  GDAL Message 6: Normalized/laundered field name: 'in_rply_t_st_' to 'in_rply_t_'
3: In CPL_write_ogr(obj, dsn, layer, driver, as.character(dataset_options),  :
  GDAL Message 6: Normalized/laundered field name: 'in_rply_t_sr_' to 'in_rply__1'

错误原因分析

ESRI Shapefile对字段名有严格的格式限制:

  • 字段名长度不能超过10个字符
  • 不能以下划线结尾
  • 仅允许包含字母、数字和下划线,无特殊字符

从报错信息可以定位核心问题:

  1. 字段epoch在更新已有图层时出现命名匹配问题,可能是旧图层无此字段,或自动命名修正后引发冲突
  2. 字段in_rply_t_st_以下划线结尾,违反Shapefile命名规范,GDAL自动修正为in_rply_t_后仍出现识别异常,导致写入失败
  3. 警告信息abbreviate_shapefile_names说明存在超过10字符的字段名,系统自动缩写后可能出现重复或不符合规范的情况,进一步触发错误

解决办法

  • 手动修改sf对象的字段名,确保所有字段符合Shapefile规范:
    # 示例:重命名不符合规范的字段
    names(twitter_data_sf)[names(twitter_data_sf) == "in_rply_t_st_"] <- "in_rply_tst"
    names(twitter_data_sf)[names(twitter_data_sf) == "in_rply_t_sr_"] <- "in_rply_tsr"
    
  • 删除目标路径下已存在的所有Shapefile关联文件(.shp/.shx/.dbf等),避免更新图层时的字段冲突
  • 导出时明确指定覆盖参数(st_write用delete_layer = TRUE,write_sf用overwrite_layer = TRUE),确保完全替换旧文件

内容的提问来源于stack exchange,提问作者Pot23

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 21:50:31