函数参数匹配:按名称匹配还是按位置匹配

Sch*_*rij 5 arguments r function

这行代码有什么区别?

mean(some_argument)

mean(x = some_argument)
Run Code Online (Sandbox Code Playgroud)

输出是相同的,但是否明确提到了x任何优点?

lmo*_*lmo 3

人们通常不会为常用参数添加参数名称,例如 x in mean,但在删除缺失值时几乎总是引用na.rm参数。

虽然忽略参数名称可以使代码紧凑,但以下是包含参数名称而不是依赖其位置的四个(相关)原因。

  1. 根据需要重新排序参数。当您按名称引用参数时,您可以任意重新排序参数并仍然产生所需的结果。有时重新排列你的论点是有用的。例如,当对其中一个参数运行循环时,您可能更愿意将循环参数放在函数的前面。
  2. 它通常更安全/更面向未来。例如,如果某些用户编写的函数或包在更新中对参数进行了重新排序,并且您依赖于参数的位置,则这会破坏您的代码。在最好的情况下,您会收到错误。在最坏的情况下,该函数会运行,但会得到不正确的结果。包含参数名称可以大大减少遇到任何一种情况的可能性。
  3. 为了使代码更加清晰。 如果某个参数很少使用,或者您希望对代码的未来读者(包括 2 个月后的您)明确说明,添加名称可以更轻松地阅读。
  4. 能够跳过参数。如果您只想更改第三个参数,那么按名称引用它可能更好。

另请参见R 语言定义:4.3.2 参数匹配