15

通常,我使用相同的功能设置。我想知道是否有一种方法,除了在路径中有一个本质上是函数包装器的新对象之外,可以设置默认参数。例如:

paste()它的sep论点是否设置为空格=" ",我厌倦了,sep=""一遍又一遍地写。那么有没有办法用我选择的默认值“临时”替换该功能?

paste(...,sep="") 

我可以通过包装来做到这一点吗?我有时注意到,一些包会强制其他同名函数在全局环境中被屏蔽。

load.r理想情况下,我想要可以在(或其他一些此类工作流起点)中逐个项目设置的东西

4

2 回答 2

18

我个人非常不愿意更改任何常用函数的默认行为——尤其是基本 R 函数。一方面,它会立即降低使用重新定义函数的任何脚本或代码片段的可移植性。更糟糕的是,阅读您的脚本的其他 R 用户可能会:(a) 不知道您对众所周知的语言元素的私人含义,或者 (b) 对不得不重新连接他们自己对功能的期望感到沮丧。对我来说,在不同的环境中为同一个符号附加不同的含义也会增加精神负担。

我认为更好的解决方案是创建类似命名的函数来实现您的首选默认值。稍加修改的名称将有效地标记这不是熟悉的基本功能,而不会给您带来太多或任何额外的输入负担。一个很好的例子是包中包含的paste0()cat0()函数gsubfnpaste()(很明显,你和我并不是唯一(经常)对' 的默认设置感到恼火的两个人sep!):

library(gsubfn)

paste0
# function (..., sep = "") 
# paste(..., sep = sep)
# <environment: namespace:gsubfn>

cat0
# function (..., sep = "") 
# cat(..., sep = sep)
# <environment: namespace:gsubfn>

然后,您可以在一个文本文件中收集许多这些函数,在脚本的早期获取它们,或者(更好地)将它们打包并通过调用library().

于 2012-01-31T04:22:18.790 回答
12

用于执行此操作的Defaults包;2014 年退休。

于 2012-01-31T03:27:06.127 回答