gpt4 book ai didi

r - 如何让 R 停止接受列名的部分匹配?

转载 作者:行者123 更新时间:2023-12-04 17:32:17 26 4
gpt4 key购买 nike

我最近很难追查我代码中的一个错误——结果我引用了一个不存在的列,但 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,可以查看文档 here .

编辑:另一种解决方案似乎使用括号表示法而不是美元

a$eligible[a["age"] >= 60] <- 1
# Error in `[.data.frame`(a, "age") : undefined columns selected

关于r - 如何让 R 停止接受列名的部分匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58513997/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com