Roxygen2를 사용하여 S4 클래스 슬롯을 올바르게 문서화하는 방법은 무엇입니까?


306

roxygen (2)로 클래스를 문서화하는 경우 제목과 설명 / 세부 사항을 지정하는 것은 함수, 메서드, 데이터 등과 동일하게 나타납니다. 그러나 슬롯과 상속은 고유 한 종류의 동물입니다. roxygen2에서 S4 클래스를 문서화하기위한 현재 또는 계획된 모범 사례는 무엇입니까?

실사 :

@slotroxygen의 초기 설명에서 태그에 대한 언급을 발견 했습니다. 2008 R- 포지 메일 링리스트 포스트 는 이것이 죽었고 @slotroxygen에 대한 지원이 없음을 나타냅니다 .

이것이 roxygen2의 사실입니까? 앞서 언급 한 게시물은 사용자가 LaTeX 마크 업을 사용하여 항목별로 목록을 작성해야한다고 제안합니다. 예를 들어 클래스를 확장하는 새로운 S4 클래스 "character"는 다음과 같이 코딩되고 문서화됩니다.

#' The title for my S4 class that extends \code{"character"} class.
#'
#' Some details about this class and my plans for it in the body.
#'
#' \describe{
#'    \item{myslot1}{A logical keeping track of something.}
#'
#'    \item{myslot2}{An integer specifying something else.}
#' 
#'    \item{myslot3}{A data.frame holding some data.}
#'  }
#' @name mynewclass-class
#' @rdname mynewclass-class
#' @exportClass mynewclass
setClass("mynewclass",
    representation(myslot1="logical",
        myslot2="integer",
        myslot3="data.frame"),
    contains = "character"
)

그러나이 작동하지만,이 \describe, \item슬롯을 문서화하기위한 접근 방법은 점에서 더 없다, roxygen (2)의 나머지 부분과 일치하지 않는 것 같다 @-delimited 태그와 슬롯에서 어떤 반대와 미등록 갈 수있다 roxygenize(). 또한 정의되는 클래스의 상속을 문서화하는 일관된 방법에 대해서는 아무 것도 말하지 않습니다. @import태그를 사용하여 종속성이 여전히 정상적으로 작동한다고 생각합니다 (특정 슬롯이 다른 패키지의 비 기본 클래스가 필요한 경우) .

요약하면, roxygen (2) 슬롯에 대한 현재 모범 사례는 무엇입니까?

현재 고려해야 할 세 가지 옵션이있는 것 같습니다.

  • A-항목 별 목록 (위의 예와 같이).
  • B @slot-...하지만 여분의 태그 / 구현으로 놓쳤습니다. 위의 예제에서 항목 별 목록의 대체로 포함 된 버전에서 roxygen / roxygen2로 @slot을 사용할 수 없었습니다. 다시, 위의 예는 roxygen (2)에서 작동합니다.
  • C- @param같은 것을 달성 하는 슬롯을 지정하기위한 대체 태그 .

githubroxygen2개발 페이지에 게시 한 게시물 에서이 질문을 빌리거나 연장하고 있습니다.


16
@slot아마 당신이 장기적으로 원하는 것이지만, 먼저 구현되어야합니다.
hadley

3
감사! 알아두면 좋습니다. 내 코드가 setClass보다 적은 수의 문장을 가지고있어서 다행 setMethod입니다. 변경이 한 번 @slot구현되면 너무 고통스럽지 않습니다.
Paul McMurdie

8
@ 슬롯에 대한 토론 : github.com/klutometis/roxygen/pull/85
Brian Diggs


2
S4 클래스는 이제 Roxygen2 버전 3에서 완벽하게 지원됩니다 ( github에서 사용 가능 ).
Gregor Thomas

답변:


29

6.0.1 현재 Roxygen2 5.0.1에 대한 답변이 업데이트되었습니다.

S4의 경우 이제 모범 사례는 @slot태그를 사용하여 문서화하는 것입니다 .

#' The title for my S4 class that extends \code{"character"} class.
#'
#' Some details about this class and my plans for it in the body.
#'
#' @slot myslot1 A logical keeping track of something.
#' @slot myslot2 An integer specifying something else.
#' @slot myslot3 A data.frame holding some data.
#'
#' @name mynewclass-class
#' @rdname mynewclass-class
#' @export

참고로, @exportClass일부 경우에만 필요하며, 함수를 내보내는 일반적인 방법은 @export지금 사용하는 것입니다 . 다른 패키지에서 클래스를 확장 할 수 없도록하려면 클래스를 내보낼 필요가 없습니다.

http://r-pkgs.had.co.nz/namespace.html#exports 도 참조하십시오.

Roygen2 3.0.0에 대한 답변이 5.0.1 현재 업데이트되었습니다.

S4의 경우 모범 사례는 다음 형식의 문서입니다.

#'  \section{Slots}{
#'    \describe{
#'      \item{\code{a}:}{Object of class \code{"numeric"}.}
#'      \item{\code{b}:}{Object of class \code{"character"}.}
#'    }
#'  }

이것은 객체 내부의 목록으로 슬롯의 내부 표현과 일치합니다. 지적한 바와 같이,이 구문은 다른 라인과 다르므로 미래에 상속에 대한 지식을 통합하지만 오늘날에는 존재하지 않는보다 강력한 솔루션을 기대할 수 있습니다.

@Brian Diggs가 지적 했듯이이 기능은 3.0.0으로 가져 왔습니다. https://github.com/klutometis/roxygen/pull/85


2
@Brian Diggs의 구현을 사용 했습니까? 작동합니까? 당신은 당신이 그 접근 방식 (과 유사하므로 무엇인가에 대한 몇 가지 세부 사항 제공 할 수 있다고 생각하십니까 @slot솔루션). 나는이 계류중인 @slot해결책 을 기다리고 (아마도 게으르다) 시도해 보지 않았다 . 나는 그것이 질문이 제기되는 방식이 아니라 의견 (@hadley 포함)을 기반으로하는 것이 @slot"진정한"답변 인 것 같습니다 . 나는 (제 질문에서와 같이) 항목 별 목록이 현재 최선의 방법이라는 평가에 동의합니다.
Paul McMurdie

19

Rd 파일 자체에 슬롯을 문서화하려는 경우 Full Decent에서 제공하는 솔루션은 정상입니다. 사용하는 경우 roxygen2, 당신은 태그를 사용할 수 @section와 기본적으로 동일 할 \describe. 예를 들면 :

#' The EXAMPLE class
#'
#' This class contains an example. This line goes into the description
#'
#' This line and the next ones go into the details.
#' This line thus appears in the details as well.
#'
#'@section Slots: 
#'  \describe{
#'    \item{\code{slot1}:}{Matrix of class \code{"numeric"}, containing data from slot1}
#'    \item{\code{slot2}:}{Object of class \code{"character"}, containing data that needs to go in slot2.}
#'  }
#'
#' @note You can still add notes
#' @name EXAMPLE 
#' @rdname EXAMPLE
#' @aliases EXAMPLE-class
#' @exportClass EXAMPLE
#' @author Joris Meys

14

roxygen2 v4.1 이상 및 Hadley의 최신 문서 :

http://r-pkgs.had.co.nz/man.html#man-classes

RC에서는 아직 시도하지 않았지만 지금은 S4에서 작동합니다.

이전

Roxygen2 버전 3.0 이상에서는 S4 클래스 슬롯이 완전히 지원되는 것 같습니다.

http://blog.rstudio.org/2013/12/09/roxygen2-3-0-0/

"roxygen2와 S4 클래스, S4 방법과 RC 클래스를 문서화 - 안전하게 사용하는 것이 해결 방법을 제거 할 수 있습니다 @alias@usage, 단순히 옳은 일을 roxygen2에 의존하고 있습니다."


2
@ 슬롯은 완벽하게 작동하며 S3 클래스를 위조하여 문서 (또는 @field)를 사용할 수도 있습니다.
Brandon Bertelsen 2016 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.