2017-05-01 6 views
0

표준 S3 메서드 디스패치 시스템을 데이터 프레임과 수식에 대해 하나의 패키지가있는 내 패키지 (OneR)에 추가하는 중입니다.다른 인수로 S3 메서드를 정의하는 모범 사례

내가 가진 문제는 두 가지 방법에 대해 서로 다른 인수가 있다는 것입니다. 데이터가 이미 x 인수에 있기 때문에 데이터 프레임 메서드를 호출 할 때 data 인수가 필요하지 않습니다. 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 인수 때문에 이상적인 솔루션을 찾지 못했습니다. 그것은 사람들을 혼란스럽게 할 수 있으며 오류의 잠재적 인 원인입니다.

내 질문
상황을 해결하는 가장 좋은 방법은 무엇인가, 즉 서로 다른 인수로 두 가지 방법이있을 때?

+0

'optbin.data.frame'에서'data = NULL'을 사용하고 사용하지 않는 것으로 문서화 할 수 없습니까? 비슷한 것은'data.table :: data.table'의'drop' 매개 변수에 대해서도 비슷합니다 : * "data.table에서 사용하지 마십시오. 사용하지 마십시오. data.table이 data.frame에서 상속 받기 때문에 여기에 있어야합니다. "*. – nrussell

+0

@nurlsell : 이것이 유효한 접근 방법이라고 생각합니다. 답변을 작성해 주시겠습니까? 감사합니다. – vonjd

답변

2

일반적인 접근 방식은 ...을 제외한 추가 인수가없는 제네릭을 사용하는 것입니다. 각 인터페이스 메서드는 실제 모델 피팅을 구현하는 기본 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 패키지가 수식에 대한 방법을 처리하는 방법을 참조하십시오.

+0

고마워요, 트릭은 명백히 모든 기본이 아닌 방법에'... '을 추가하는 것입니다. – vonjd