r - 如何使 R 停止接受列名的部分匹配?
问题描述
我最近在查找代码中的错误时遇到了困难——结果发现我引用了一个不存在的列,但 R 没有给我任何关于引用不存在的列的错误或警告。相反,因为我引用的不存在的列恰好与另一列名称的开头匹配,所以 R 默默地替换了另一列。
我发现这是一种非常不受欢迎的行为——R 怎么称呼它,我该如何关闭它?
例子:
> a <- as.data.frame(cbind(rep(0,5),rep(2,5),seq(58,62)))
> colnames(a) <- c('eligible','height','age_of_death')
> a
eligible height age_of_death
1 0 2 58
2 0 2 59
3 0 2 60
4 0 2 61
5 0 2 62
> a$he
[1] 2 2 2 2 2
> a$eligible[a$age >= 60] <- 1
> a
eligible height age_of_death
1 0 2 58
2 0 2 59
3 1 2 60
4 1 2 61
5 1 2 62
不确定是否所有版本的 R 都这样做,但我使用的是 3.6.0。
如何禁用此功能,以便 R 会告诉我是否引用了一个不存在的列,而不是尝试为我替换一个名称相似的列?
解决方案
转换a
为 tibble 似乎会引发警告消息,不确定这是否足以满足您的需求
library(dplyr)
a < - as_tibble(a)
a$eligible[a$age >= 60] <- 1
# Warning message:
# Unknown or uninitialised column: 'age'.
如果您不熟悉 tibbles,可以查看此处的文档。
编辑:另一种解决方案似乎使用括号符号而不是美元
a$eligible[a["age"] >= 60] <- 1
# Error in `[.data.frame`(a, "age") : undefined columns selected
推荐阅读
- anylogic - 代理状态图有问题
- angular - ng2-file-upload: How to change the form-data name for file upload
- postgresql - how to fix "OperationalError: (psycopg2.OperationalError) server closed the connection unexpectedly"
- javascript - 无法在 .then() 内设置未定义的属性“注释”
- erlang - recon_alloc:memory(allocated) 远小于从 os 分配的内存
- c++ - 为什么使用 BasedOnStyle: Google 每次我复制/粘贴时都会“添加”一个缩进?
- apache-kafka - 如何设置 Elastic Node APM 分布式跟踪以使用 Kafka 和多个 Node 服务?
- node.js - 带有 NVM 的节点。Debian 9
- html - 全部关闭时,Bootstrap 手风琴头更小
- d3.js - D3.js 缩放时重新定位元素