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

同一R代码(dplyr/stringr/sf)因包版本差异运行结果不同

问题解决:dplyr rename_with处理sf对象时的版本兼容性报错

问题根源

新版本dplyr(1.1.x及以上)的rename_with函数会自动同步更新sf对象的agr属性(记录各列与几何列的关联关系)的名称,而旧版本dplyr(1.0.x)不会处理这个属性。你的代码直接传入str_remove作为重命名函数,当rename_with处理agr的名称时,只传递了待处理的字符串,没有传入pattern参数,就触发了argument "pattern" missing的报错。

解决方案

方案1:用匿名函数包裹str_remove,确保始终传递pattern

把str_remove放在匿名函数里,明确指定pattern参数,这样不管处理列名还是agr的名称,都能正确传参:

# 替换成你实际要移除的pattern
df <- df %>% 
  rename_with(~str_remove(.x, "要移除的匹配模式"))

方案2:指定cols参数,仅重命名非几何列

通过cols参数限定重命名的范围,跳过几何列,避免rename_with去处理agr属性:

# 假设几何列名为geometry,替换成你数据中的实际列名
df <- df %>% 
  rename_with(str_remove, pattern = "要移除的匹配模式", cols = -geometry)

方案3:临时转换为普通数据框重命名后再转回sf

如果上述方案不适用,可以先把sf对象转成普通数据框,重命名后再转回sf(注意保留几何列):

df <- df %>% 
  as.data.frame() %>% 
  rename_with(str_remove, pattern = "要移除的匹配模式") %>% 
  st_sf()  # 转回sf对象,自动识别几何列

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 23:42:25