如何使R停止接受列名的部分匹配?

如何使R停止接受列名的部分匹配?,r,dataframe,R,Dataframe,我最近很难找到代码中的一个bug——结果是我引用了一个不存在的列,但是R没有给我任何关于引用一个不存在的列的错误或警告。相反,因为我引用的不存在的列恰好与另一列名称的开头匹配,所以R正在默默地替换另一列 我发现这是一种非常不受欢迎的行为——R称之为什么,如何关闭它 例如: > a <- as.data.frame(cbind(rep(0,5),rep(2,5),seq(58,62))) > colnames(a) <- c('eligible','height','age

我最近很难找到代码中的一个bug——结果是我引用了一个不存在的列,但是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
>a colnames(a)a
符合条件的身高死亡年龄
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$合格[a$年龄>=60]a
符合条件的身高死亡年龄
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
转换为TIBLE似乎会抛出一条警告消息,不确定这是否足够

library(dplyr)
a < - as_tibble(a)
a$eligible[a$age >= 60] <- 1
# Warning message:
# Unknown or uninitialised column: 'age'.
库(dplyr)
a<-as__Ètable(a)

$qualified[a$age>=60]=60]这让我很惊讶,尽管我知道函数参数名称可以部分匹配。哇。我不知道是贝斯特干的。我想,还有一个额外的提花人。
a$eligible[a["age"] >= 60] <- 1
# Error in `[.data.frame`(a, "age") : undefined columns selected