在名称末尾缺少数据的数据框中使用美元符号

时间:2019-05-29 15:11:58

标签: r

也许这不是问这个的地方。我最近遇到了奇怪的事情 错误需要花费数小时来调试。终于我看到其中一个列名 输出错误的值。这个问题可以简化为这个简单的例子。

dframe1 = data.frame(
  hello_a = "a",
  hello_b = "b"
)

dframe1$hello
#> NULL


dframe2 = data.frame(
  hello_a = "a",
  bye_b = "b"
)

dframe2$hello
#> [1] a
#> Levels: a
dframe2$bye
#> [1] b
#> Levels: b
dframe2[,"bye"]
#> Error in `[.data.frame`(dframe2, , "bye"): undefined columns selected
dframe2[,"bye_b"]
#> [1] b
#> Levels: b

reprex package(v0.2.0)于2019-05-29创建。

这对我来说很奇怪,有没有办法对R强制执行“严格”模式,这样就不会发生?我了解数据帧是R中的某种列表,但是是否有一些使用$的文档?

1 个答案:

答案 0 :(得分:3)

我找到了有关此问题的文档,

  

x $ name等效于x [[“”“,确切= FALSE]]

所以,如果这样做

dframe2[["bye",exact = FALSE]]
[1] b
Levels: b

我们得到了预期的行为。我仍然不知道是否可以不使用需要字符串的[[来改变这种行为。

编辑

正如Ben Bolker在评论中所建议的那样,这或多或少是我想要做的。

options(warnPartialMatchDollar=TRUE)
options(warn=2)

dframe2 = data.frame(
  hello_a = "a",
  bye_b = "b"
)

dframe2$hello
#> Warning in `$.data.frame`(dframe2, hello): Partial match of 'hello' to
#> 'hello_a' in data frame
#> [1] a
#> Levels: a

reprex package(v0.2.0)于2019-05-29创建。