重载 R 函数 - 这是对的吗?
Overloading R function - is this right?
consumeSingleRequest <- function(api_key, URL, columnNames, globalParam="", ...)
consumeSingleRequest <- function(api_key, URL, columnNames, valuesList, globalParam="")
我正在尝试重载这样的函数,它在第一个函数中接收多个列表并将它们组合成一个列表列表。但是,我似乎无法跳过传入 globalParam 并仅传入 ...
中的多个列表
有人知道怎么做吗?
我听说 S3 方法可以用于此目的?有人知道怎么做吗?
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="")
而supply只是在实际调用函数时提供需要的参数
consumeSingleRequest(api_key=..., valueList=...)
P.S。在 Advanced R 书中可以找到很好的解释。
consumeSingleRequest <- function(api_key, URL, columnNames, globalParam="", ...)
consumeSingleRequest <- function(api_key, URL, columnNames, valuesList, globalParam="")
我正在尝试重载这样的函数,它在第一个函数中接收多个列表并将它们组合成一个列表列表。但是,我似乎无法跳过传入 globalParam 并仅传入 ...
中的多个列表有人知道怎么做吗?
我听说 S3 方法可以用于此目的?有人知道怎么做吗?
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="")
而supply只是在实际调用函数时提供需要的参数
consumeSingleRequest(api_key=..., valueList=...)
P.S。在 Advanced R 书中可以找到很好的解释。