R语言使用tidyr的extract函数出现regex参数未识别报错如何解决?
R语言extract函数拆分身高列报错排查与修正
报错原因
- 核心问题是函数命名冲突:你当前R环境中调用的
extract并非tidyr包中用于正则拆分列的函数,而是magrittr包中作为[运算符别名的extract函数。该函数仅用于数据框/向量的子集提取,不识别regex、remove等tidyr::extract的专属参数,因此抛出未使用参数的报错。
修正方案
优先推荐第一种方案,完全不受环境中包加载顺序影响:
方案1:显式指定调用tidyr包的extract函数
直接在函数前加包名前缀规避命名冲突,额外添加convert = TRUE参数可直接将拆分得到的英尺、英寸列转为数值类型,无需后续手动转换:
library(tidyverse) # 构造测试数据 s <- c("5'10", "6'1") tab <- data.frame(x = s) # 显式指定tidyr包的extract函数执行拆分 tab %>% tidyr::extract(x, c("feet", "inches"), regex = "(\\d)'(\\d{1,2})", convert = TRUE)
运行输出结果符合预期:
feet inches 1 5 10 2 6 1
方案2:调整包加载顺序
如果不想每次写包名前缀,可以在运行拆分代码前重新加载一次tidyr包,让后加载的tidyr的extract覆盖其他包的同名函数即可:
# 重新加载tidyr,覆盖冲突函数 library(tidyr) tab %>% extract(x, c("feet", "inches"), regex = "(\\d)'(\\d{1,2})", convert = TRUE)
内容的提问来源于stack exchange,提问作者SHAS
相关产品推荐
相关产品推荐

