如何使R停止接受列名的部分匹配?
我最近很难找到代码中的一个bug——结果是我引用了一个不存在的列,但是R没有给我任何关于引用一个不存在的列的错误或警告。相反,因为我引用的不存在的列恰好与另一列名称的开头匹配,所以R正在默默地替换另一列 我发现这是一种非常不受欢迎的行为——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
> 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