作者:手机用户2502927665 | 来源:互联网 | 2023-02-05 10:43
我正在向我的程序包(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
数据框方法中的参数,我也找不到理想的解决方案。这可能会使人感到困惑,并且是潜在的错误来源。
我的问题
是解决情况的最佳方法是什么,即当您有两种方法具有不同的参数时?
1> Hong Ooi..:
通常的方法是拥有一个除了没有其他参数的泛型...
。每个接口方法都应调用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包如何处理公式的方法。