R语言data.frame的$操作符存在模糊字符串匹配?这是Bug吗?
关于R语言data.frame$操作符模糊匹配的问题
先来看你给出的示例代码:
testdf <- data.frame(letters60 = c("a","b","c"))
testdf$letters
[1] a b c
Levels: a b c
这绝对不是Bug,而是R语言里一个刻意设计的特性哦!
你看到的这个现象,是因为$操作符对data.frame的列名支持前缀模糊匹配:当你输入的字符串能唯一匹配到某一列名的开头部分时,它就会自动帮你定位到对应的列。比如你的例子里,testdf只有一列letters60,而letters正好是它的唯一前缀,所以testdf$letters就直接返回了这列的值。
不过这个特性虽然能帮你少打几个字符,但有时候也会带来意外——如果你的data.frame里有多个列名共享同一个前缀(比如同时有letters60和letters70),那testdf$letters就会返回NULL,还会弹出警告告诉你匹配不唯一。
如果想要严格的精确匹配,建议用[[操作符代替$,比如testdf[["letters"]]就会因为找不到精确叫letters的列而返回NULL,不会触发模糊匹配的逻辑。
内容的提问来源于stack exchange,提问作者Jon T
相关产品推荐
相关产品推荐

