仮説
Roxygen2 はヒューリスティックを使用します。ピリオドの前の接頭辞が既知の場合 ( merge
、cut
)、メソッドは S3 メソッドであり、そうでない場合 ( slice
) は通常のメソッドです。
質問
このヒューリスティックは文書化されていますか? さらに重要なことに、それを回避する方法はありますか? 接頭辞を気にせずに、関数名の未使用の識別子を記述できるはずです。これは、特定のパッケージの安定性に関して提供できる将来の保証がないことも意味します。「S3クラスには正式な定義がない」ことは理解していますが(以下に引用されている最後のビネット)、正式な定義があるものをいじるのはばかげているようです。さらに、新しいパッケージを使用するためにパッケージを将来編集すると、突然、既存の API を無効にすることが必要になる場合があります。
ファイルが生成された後に手動で編集することでこれを修正しようとしましたNAMESPACE
が、これはパッケージのインストールを台無しにすることがあります(まだ理解していない方法で)。次の実験は、質問の設定です。
実験
を実行devtools::create("MyPackage")
した後、次のコードを入力します
#' @export
merge.apples <- function() {}
#' @export
merge.oranges <- function() {}
#' @export
cut.apples <- function() {}
#' @export
cut.oranges <- function() {}
#' @export
slice.apples <- function() {}
#' @export
slice.oranges <- function() {}
でMyPackage/R/somefile.R
。
今すぐ実行しますdevtools::document()
(2回)。内容がわかります
# Generated by roxygen2: do not edit by hand
S3method(cut,apples)
S3method(cut,oranges)
S3method(merge,apples)
S3method(merge,oranges)
export(slice.apples)
export(slice.oranges)
ファイルに生成されていますMyPackage/NAMESPACE
。つまり、4つの機能がS3機能として想定されています。
ページから
vignette("namespace", package = "roxygen2")
vignette("roxygen2", package = "roxygen2")
vignette("rd", package = "roxygen2")
現在(2014年頃から?)#' @export
S3メソッドまたは通常のメソッドの前に書くのに十分であり、それがどちらであるかがわかりroxygen2
ます。