我只是在GitHub上随机地浏览一个相对较新的小型R包,而我所看到的第一件事就是
options(scipen = 999)
哪个给我敲响了警钟。他们多次这样做,包括
options(stringsAsFactors = FALSE)
之所以困扰我,是因为它可能给用户带来意想不到的调试行为,尤其是对于read.csv()这样的通用函数,其中某些人可能依赖于默认为因子的字符串
> dat = read.csv("a.csv")
> str(dat)
'data.frame': 2 obs. of 3 variables:
$ a: int 1 2
$ b: num NA 3.5
$ c: Factor w/ 2 levels "Hello","my": 1 2
> chg_saf = function() {
+ options(stringsAsFactors = FALSE)
+ }
> chg_saf()
> dat = read.csv("a.csv")
> str(dat)
'data.frame': 2 obs. of 3 variables:
$ a: int 1 2
$ b: num NA 3.5
$ c: chr "Hello" "my"
如果他们至少尝试在功能结束时恢复默认状态,可能不会打扰我很多,但是即使那样也会打扰我,因为由于错误而导致的功能过早退出会阻止状态从恢复中恢复(我实际上遇到了setwd有此问题的软件包...)。
现在,我计划向他们的GitHub问题跟踪器提交一个问题,礼貌地要求他们不要这样做。但是在我这样做之前,它激起了我的好奇心。 在某些情况下,是否有适当的情况可以覆盖用户不知道的R包中R的全局选项?