重载R函数 - 这是对的吗?

时间:2015-06-29 18:48:12

标签: r overloading

consumeSingleRequest <- function(api_key, URL, columnNames, globalParam="", ...) 
consumeSingleRequest <- function(api_key, URL, columnNames, valuesList, globalParam="")

我正在尝试重载这样的函数,它在第一个函数中接受多个列表并将它们组合成一个列表列表。但是,我似乎无法跳过globalParam中的传递并传递...中的多个列表。

有谁知道怎么做?

我听说S3方法可以用于此吗?有谁知道怎么做?

1 个答案:

答案 0 :(得分:3)

R不支持重载函数的概念。它支持具有可变数量参数的函数调用。因此,您可以声明具有任意数量参数的函数,但在实际调用函数时仅提供其中的一部分。以vector函数为例:

> vector
function (mode = "logical", length = 0L) 
.Internal(vector(mode, length))
<bytecode: 0x103b89070>
<environment: namespace:base>

它最多支持2个参数,但可以使用none或某个子集调用(在这种情况下使用默认值):

> vector()
logical(0)
> vector(mode='numeric')
numeric(0)

所以你只需要第二个声明:

consumeSingleRequest <- function(api_key, URL, columnNames, valuesList, globalParam="")

并且在实际调用函数时提供所需的参数

consumeSingleRequest(api_key=..., valueList=...)

P.S。可以在Advanced R书中找到一个很好的解释。