使用不同参数定义 S3 方法的最佳实践
Best practice for defining S3 methods with different arguments
我正在向我的程序包 (OneR) 添加标准 S3 方法调度系统,其中我有一种用于数据框的方法和一种用于公式的方法。
我遇到的问题是我对这两种方法有不同的论据。调用数据框方法时不需要 data
参数,因为数据已经存在于 x
参数中。 data
只有在调用公式方法时才需要
我是这样做的:
Usage
optbin(x, data, method = c("logreg", "infogain", "naive"), na.omit = TRUE)
## S3 method for class 'formula'
optbin(x, data, method = c("logreg", "infogain", "naive"),
na.omit = TRUE)
## S3 method for class 'data.frame'
optbin(x, data = x, method = c("logreg", "infogain",
"naive"), na.omit = TRUE)
Arguments
x either a formula or a data frame with the last column containing the target variable.
data data frame which contains the data, only needed when using the formula interface because otherwise 'x' will already contain the data.
method character string specifying the method for optimal binning, see 'Details'; can be abbreviated.
na.omit logical value whether instances with missing values should be removed.
我首先想到我可以在数据框方法中省略 data
参数,但是在检查包时我收到警告,因为它存在于 UseMethod
函数中......当我把它放在那里时,由于方法之间的不一致,我会收到另一个警告。我也试过 ...
但我也在那里收到警告,此外我必须记录它,这会让用户感到困惑而不是帮助。
但由于数据框方法中的 data = x
参数,我也没有找到理想的解决方案。它可能会使人感到困惑,并且是潜在的错误来源。
我的问题
解决这种情况的最佳方法是什么,即当您有两种具有不同参数的方法时?
通常的方法是使用一个没有额外参数的泛型,...
除外。每个接口方法都应调用实现实际模型拟合的基础 default
方法。
optbin <- function(x, ...)
UseMethod("optbin")
optbin.formula <- function(formula, data, method, na.omit, arg1, arg2, ...)
{
...
optbin.default(x, y, arg1, arg2)
}
optbin.data.frame <- function(data, method, na.omit, arg1, arg2, ...)
{
...
optbin.default(x, y, arg1, arg2)
}
optbin.default <- function(x, y, arg1, arg2)
{ ... }
例如,请参阅 nnet 和 MASS 包如何处理公式的方法。
我正在向我的程序包 (OneR) 添加标准 S3 方法调度系统,其中我有一种用于数据框的方法和一种用于公式的方法。
我遇到的问题是我对这两种方法有不同的论据。调用数据框方法时不需要 data
参数,因为数据已经存在于 x
参数中。 data
只有在调用公式方法时才需要
我是这样做的:
Usage
optbin(x, data, method = c("logreg", "infogain", "naive"), na.omit = TRUE)
## S3 method for class 'formula'
optbin(x, data, method = c("logreg", "infogain", "naive"),
na.omit = TRUE)
## S3 method for class 'data.frame'
optbin(x, data = x, method = c("logreg", "infogain",
"naive"), na.omit = TRUE)
Arguments
x either a formula or a data frame with the last column containing the target variable.
data data frame which contains the data, only needed when using the formula interface because otherwise 'x' will already contain the data.
method character string specifying the method for optimal binning, see 'Details'; can be abbreviated.
na.omit logical value whether instances with missing values should be removed.
我首先想到我可以在数据框方法中省略 data
参数,但是在检查包时我收到警告,因为它存在于 UseMethod
函数中......当我把它放在那里时,由于方法之间的不一致,我会收到另一个警告。我也试过 ...
但我也在那里收到警告,此外我必须记录它,这会让用户感到困惑而不是帮助。
但由于数据框方法中的 data = x
参数,我也没有找到理想的解决方案。它可能会使人感到困惑,并且是潜在的错误来源。
我的问题
解决这种情况的最佳方法是什么,即当您有两种具有不同参数的方法时?
通常的方法是使用一个没有额外参数的泛型,...
除外。每个接口方法都应调用实现实际模型拟合的基础 default
方法。
optbin <- function(x, ...)
UseMethod("optbin")
optbin.formula <- function(formula, data, method, na.omit, arg1, arg2, ...)
{
...
optbin.default(x, y, arg1, arg2)
}
optbin.data.frame <- function(data, method, na.omit, arg1, arg2, ...)
{
...
optbin.default(x, y, arg1, arg2)
}
optbin.default <- function(x, y, arg1, arg2)
{ ... }
例如,请参阅 nnet 和 MASS 包如何处理公式的方法。