这个站点有很多关于如何修复"未定义的列"错误的问题.

我有一个完全相反的问题:如何犯"未定义的列"错误.

我经常改变文件中的变量名.

这会导致以下错误:

r$> df <- data.frame(gender=c(1,1,NA,0))
r$> sum(is.na(df$male))
[1] 0

当正确的结果为1时.

如果我试图访问的列未定义,我希望R打印一条错误消息.

不是默默地失败.

我怎么能做到这一点?

推荐答案

不幸的是,在这类事情上,R过于宽大.定义了data.ages的$运算符,以允许访问不存在的列,并在这种情况下返回NULL.

有一些替代的data.frame实现,它们有点严格.值得注意的是,Tidyverse包'tibble','dplyr'等使用的tbl_df数据 struct 至少会向您显示一个警告:

df <- tibble::tibble(gender = c(1, 1, NA, 0))
sum(is.na(df$male))
# [1] 0
# Warning message:
# Unknown or uninitialised column: `male`.

或者,您也可以通过覆盖data.Frames的$来使其成为data.ages的硬错误:

registerS3method(
  '$', 'tbl_df',
  \(x, name) {
    stopifnot(name %in% colnames(x))
    NextMethod('$')
  }
)

然而,请注意,这将only应用于平坦data.frame,而不是平坦,因为后者也覆盖$.似乎没有一个选项可以将其设置为TIBBLES的硬错误(没有将all个警告转换为错误);这可能是对包的一个很好的特性请求(或者,您可以通过将'data.frame'替换为'tbl_df来使上述代码应用于TIBBLES).

R相关问答推荐

gt()从gt为相同内容的单元格 colored颜色 不同?

根据多个条件增加y轴高度以适应geom_text标签

R函数‘paste`正在颠倒其参数的顺序

R中插入符号训练函数的中心因子和尺度因子预测

一小时满足条件的日期的 Select

如何从R ggplot图片中获取SVG字符串?

将二进制数据库转换为频率表

R中有约束的优化问题:如何用复数和对数效益函数解决问题?

如何移除GGPlot中超出与面相交的任何格网像元

如何在R中使用hmm TMB提前一步预测观察到的状态?

如何删除设置大小的曲线图并添加条形图顶部数字的百分比

如何提取R中其他字符串和数字之间的字符串?

Rmarkdown::Render vs Source()

有没有办法将基于每个值中出现的两个关键字或短语的字符串向量重新编码为具有这两个值的新向量?

在鼠标悬停时使用Plotly更改geom_point大小

从两个数据帧中,有没有办法计算R中一列的唯一值?

在R中添加要打印的垂直线

使用dplyr删除具有条件的行

如何在给定的环境中找到函数的函数参数?

Gggvenn为Venn增加了不存在的价值