也许这不是问这个的地方。我最近遇到了奇怪的事情 错误需要花费数小时来调试。终于我看到其中一个列名 输出错误的值。这个问题可以简化为这个简单的例子。
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中的某种列表,但是是否有一些使用$
的文档?
答案 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创建。