R语言ls(pattern)匹配异常:空格规则命中下划线变量的原因与解决
R语言ls()正则匹配异常问题分析与修复
问题原因
R中ls()函数的pattern参数接收的是正则表达式,而非操作系统文件匹配常用的通配符规则:
- 你写的
"Accuracy *"中,*在正则语法里代表「匹配前面的字符0次或多次」,也就是说该规则匹配的是「包含Accuracy字符串,且后面跟0个或多个空格」的所有变量名 Accuracy_3的变量名开头就是Accuracy,且后面没有空格,符合「0个空格」的匹配条件,因此会被误纳入匹配结果
修复方案
调整pattern的正则表达式,实现仅匹配Accuracy后带空格的变量即可,推荐两种写法:
- 精确要求Accuracy后至少存在1个空格,正则写为
"Accuracy +",+在正则中代表「匹配前面的字符1次或多次」 - 更严谨的写法,增加开头匹配锚定
^,避免变量名中间包含Accuracy的对象被误匹配,正则写为"^Accuracy\\s+",\\s可以匹配所有空白字符(包括空格、制表符等),适配性更强
修复后代码示例
library(dplyr) `Accuracy 1` <- data.frame (Product = "10001", Bias = 0.4, Variance = 0.1, Disturbance = 0.5) `Accuracy 2` <- data.frame (Product = "20001", Bias = 0.1, Variance = 0.1, Disturbance = 0.8) `Accuracy_3` <- data.frame (Product = "30001", x = "test", y = 0.1, z = 0.2, w = "why") # 调整pattern参数即可 acc_output <- mget(ls(pattern="^Accuracy\\s+")) %>% bind_rows()
运行后acc_output仅会包含Accuracy 1和Accuracy 2的合并结果,不会误纳入Accuracy_3。
内容的提问来源于stack exchange,提问作者LGe
相关产品推荐
相关产品推荐

