为什么 sapply() 和 options() “不受欢迎”?

问题描述

Jim Hester 的“lintr”包包含许多不同的 R 短绒。README for the package 以这种方式描述其中一个短绒:

undesirable_function_linter: 报告使用不良功能,例如选项或 sapply 并提出替代方案。

我很惊讶。我已经使用 R 很多年了,而且我已经使用 options()sapply() 很多年了。是什么让他们不受欢迎?还有更好的选择吗?

我知道 getOption(),但它不能代替 options()。我还了解 *apply() 变体、Map() 和 Tidyverse map 函数。 Tidyverse 函数在我看来总体上比 sapply()Map() 更好——我更喜欢 Tidyverse 函数中的默认值和参数顺序——但我没想过调用 { {1}}“不受欢迎。”

解决方法

如果您查看该函数的标题,

function(fun = default_undesirable_functions)

您会看到它在 default_undesirable_functions 中记录了它的选择,如果您查看该对象,您会看到:

...
$options
[1] "use withr::with_options()"
...
$sapply
[1] "use vapply() or lapply()"
...

从备选方案中,你可以猜出为什么作者认为这些功能是“不受欢迎的”:

  • options() 不好,因为它具有全局副作用。 withr::with_options() 替代方案保留对本地选项的任何更改。
  • sapply() 不好,因为 vapply() 更安全(如 ?sapply 中所述)。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...