0

TLDR

严格的最佳实践是否建议积极主动的 R 开发人员使用约定明确消除其包文件中的所有base函数——甚至是无处不在的常见函数,如or c()cat().Rpackage::function()


语境

虽然是新手开发人员,但我需要在 R 中创建一个(专有)包。文本R 包(由权威作者 Hadley Wickham 和 Jenny Bryan 撰写)已被证明非常有用(如果偶尔不推荐使用)。

我热衷于从一开始就遵循最佳实践,以便为自己节省时间和精力。如正文中所述,使用运算符可以 通过消除名称重载的函数的歧义::来防止当前和将来的冲突。也就是说,作者很小心地按照约定介绍了每个函数,并且他们建议在一个包的文件中package::function()普遍使用它。.R

但是,他们的代码示例经常调用来自base包但没有附带base::. 许多base函数,比如无处不在的c()or cat(),被 R 程序员在睡梦中使用,并且(我想)不太可能被一个自以为是的开发人员超载。尽管如此,看到(例如)base::with()对(base函数)的并列print(),都在几行文本之内是令人困惑的。

...(这些功能的灵感来自于base::with()工作原理。)

f <- function(x, sig_digits) {
  # imagine lots of code here
  withr::with_options(
    list(digits = sig_digits),
    print(x)
  )
  # ... and a lot more code here
}

我理解 的目的是向读者base::with()明确介绍该功能。with()然而,base::当包被显式命名为从任何其他包调用的任何函数时,(在代码本身内)的缺失似乎很突出。鉴于我缺乏经验,我对假设作者的意图感到不舒服。

问题

函数的名称是否base足够独特以至于使用这种约定——调用包中base::function()的每一个——不值得?超载功能的风险(在未来的某个时候)远远超过了不便(和纯粹的丑陋)function()base

my_vector <- base::c(1, 2, 3)

整个.R文件?如果没有,是否有既定的惯例可以平衡明确与优雅?

与往常一样,我很感谢任何帮助,尤其是在这方面,这是我在 Stack Overflow 上的第一篇文章。

4

0 回答 0