我刚刚发现R允许我使用部分变量名称来子集数据帧,只要它们是唯一定义的。我发现这很危险,我想知道是否有一种方法(如环境变量或其他东西)来禁用此行为。
这就是我的意思:
myframe <- data.frame(othervar=1:3, myvar=4:6)
print(myframe$myv)
[1] 4 5 6
我想要发生的事情与
相同print(myframe$wrong)
NULL
有什么方法可以改变这个吗?
答案 0 :(得分:3)
不,不是真的。您可以使用options(warnPartialMatchDollar=TRUE)
在执行此操作时收到警告(我正在使用r-devel ...我认为这是发布的版本?),而您可以使用options(warn=2)
将警告升级为错误(但这会将所有警告升级为错误...)
我认为标准建议/最佳做法是使用[[
- 索引而不是
myframe <- data.frame(othervar=1:3, myvar=4:6)
myframe$myv
## [1] 4 5 6 (no problem)
myframe$wrong
## NULL
options(warnPartialMatchDollar=TRUE)
myframe$myv
## [1] 4 5 6
## Warning message:
## In `$.data.frame`(myframe, myv) :
## Partial match of 'myv' to 'myvar' in data frame
options(warn=2) ## upgrade warnings to errors
myframe$myv
## Error in `$.data.frame`(myframe, myv) :
## (converted from warning) Partial match of 'myv' to 'myvar' in data frame
myframe[["myv"]]
## NULL