2017-08-28 8 views
2

をオーバーロードするときS4として使用S3クラスを文書化:私は次の文私のパッケージ.Rファイルを持っているようにRoxygen2:私は次のコンテキストを持つRベース機能(COR)

私が過負荷cor基本機能を実行します。

#'export 
setGeneric("cor") 

は今、私は私のオブジェクトのための特定の機能(strangerという名前のクラス)を作成したい - ここでは簡単のために、私はちょうど私のオブジェクトが.idという名前の追加の列とdata.tableであることを検討してください。

#' Correlation for stranger objects 
#' describeIn cor Correlation method for stranger objects. 
setMethod("cor",signature(x="stranger"),function(x, method = c("pearson", "kendall", "spearman")){ 
    selectMethod("cor","ANY")(x[,-'.id',with=FALSE],y=NULL, use="everything",method=method) 
}) 

私はsetGenericをunderstant場合は、S4クラスに依存している - それゆえsignatureパラメータ。

しかし、私はS4クラスを使用しますが、単純な古いやり方で自分のstrangerオブジェクトを構築していない:

ある
buildClass <- function(x,...){ 
    #... prepare out object as data.table with .ìd column 
    class(out) <- c("stranger", class(out)) 
    return(out) 
} 

は、私は私のオブジェクトのためのS4クラスを持っていません。 Dispactはまだ動作します:corをオブジェクトに呼び出すと、専用メソッドが正しく適用されます。

私の質問は、ROxygen2を正しく文書化することです。現在、私の機能をロードするときに、私は次のメッセージが発生します

Updating stranger documentation 
Loading stranger 
Creating a generic function for 'cor' from package 'stats' in package 'stranger' 
in method for 'cor' with signature 'x="stranger"': no definition for class "stranger" 

を私はすでに慎重ハドレーroxygen2上のビネットプラスのstackoverflowに関連思われるいくつかの質問を読んでいるが、彼らは私だけのに対し、いずれかの古典的S3機構や純粋S4に対処しますS4コンストラクターを持たず、setClasssetGenericはS4に依存します。

答えて

1

S4汎用メソッドcor()を設定するのではなく、S3ジェネリックとして再定義し、そのメソッドを定義することができます。説明するために、私は2つだけRファイル、 "buildClass.R"、および "cor.R" とのRパッケージを作成し、以下に再現:

buildClass.R:

#' Stranger Class Constructor 
#' 
#' Put some details about it 
#' 
#' @param x an object 
#' 
#' @export 
buildClass <- function(x){ 
    class(x) <- c("stranger", class(x)) 
    return(x) 
} 

うわっ。あなたのパッケージを読み込む場合はR

#' Cor 
#' 
#' Put some details about it 
#' 
#' @param x an object 
#' @param ... other arguments 
#' 
#' @rdname cor 
#' @export 
cor <- function(x, ...) { 
    UseMethod('cor', x) 
} 

#' @rdname cor 
#' @export 
cor.stranger <- function(x, ...) { 
    return(1) 
} 

#' @rdname cor 
#' @export 
cor.default <- function(x, ...) { 
    return(stats::cor(x, ...)) 
} 

はその後、(私の場合、「anRpackage」に命名)、ユーザーは、パッケージ・マスクstats::corが、道cor.default()が定義されていることを警告が表示されます、stats::cor()は、クラスstrangerでないオブジェクトに対して呼び出されます。

library(anRpackage) 

Attaching package: ‘anRpackage’ 

The following object is masked from ‘package:stats’: 

    cor 

set.seed(1234) 
regular_mat <- matrix(rnorm(100), nrow = 25) 
stranger_mat <- buildClass(regular_mat) 
cor(regular_mat) 

      [,1]  [,2]  [,3]  [,4] 
[1,] 1.00000000 0.1531414 -0.01948986 -0.3737424 
[2,] 0.15314141 1.0000000 0.17531423 -0.1752925 
[3,] -0.01948986 0.1753142 1.00000000 0.4371213 
[4,] -0.37374237 -0.1752925 0.43712127 1.0000000 

cor(stranger_mat) 
[1] 1 

(「CRANが使用するのと同じ設定を使用して」チェック)デフォルトcran = TRUEを使用してdevtools::check()でパッケージをチェックし、エラーなし、警告、またはノート育てられました:

> check(current.code) 
Updating anRpackage documentation 
Loading anRpackage 
Setting env vars ---------------------------------------------------------------- 
CFLAGS : -Wall -pedantic 
CXXFLAGS: -Wall -pedantic 
Building anRpackage ------------------------------------------------------------- 
'/usr/lib/R/bin/R' --no-site-file --no-environ --no-save --no-restore --quiet \ 
    CMD build '/home/duckmayr/anRpackage' --no-resave-data --no-manual 

* checking for file ‘/home/duckmayr/anRpackage/DESCRIPTION’ ... OK 
* preparing ‘anRpackage’: 
* checking DESCRIPTION meta-information ... OK 
* checking for LF line-endings in source and make files and shell scripts 
* checking for empty or unneeded directories 
* building ‘anRpackage_1.0.tar.gz’ 

Setting env vars ---------------------------------------------------------------- 
_R_CHECK_CRAN_INCOMING_USE_ASPELL_: TRUE 
_R_CHECK_CRAN_INCOMING_   : FALSE 
_R_CHECK_FORCE_SUGGESTS_   : FALSE 
Checking anRpackage ------------------------------------------------------------- 
'/usr/lib/R/bin/R' --no-site-file --no-environ --no-save --no-restore --quiet \ 
    CMD check '/tmp/RtmpTcdHJ5/anRpackage_1.0.tar.gz' --as-cran --timings \ 
    --no-manual 

* using log directory ‘/tmp/RtmpTcdHJ5/anRpackage.Rcheck’ 
* using R version 3.4.3 (2017-11-30) 
* using platform: x86_64-pc-linux-gnu (64-bit) 
* using session charset: UTF-8 
* using options ‘--no-manual --as-cran’ 
* checking for file ‘anRpackage/DESCRIPTION’ ... OK 
* checking extension type ... Package 
* this is package ‘anRpackage’ version ‘1.0’ 
* checking package namespace information ... OK 
* checking package dependencies ... OK 
* checking if this is a source package ... OK 
* checking if there is a namespace ... OK 
* checking for executable files ... OK 
* checking for hidden files and directories ... OK 
* checking for portable file names ... OK 
* checking for sufficient/correct file permissions ... OK 
* checking whether package ‘anRpackage’ can be installed ... OK 
* checking installed package size ... OK 
* checking package directory ... OK 
* checking DESCRIPTION meta-information ... OK 
* checking top-level files ... OK 
* checking for left-over files ... OK 
* checking index information ... OK 
* checking package subdirectories ... OK 
* checking R files for non-ASCII characters ... OK 
* checking R files for syntax errors ... OK 
* checking whether the package can be loaded ... OK 
* checking whether the package can be loaded with stated dependencies ... OK 
* checking whether the package can be unloaded cleanly ... OK 
* checking whether the namespace can be loaded with stated dependencies ... OK 
* checking whether the namespace can be unloaded cleanly ... OK 
* checking loading without being on the library search path ... OK 
* checking dependencies in R code ... OK 
* checking S3 generic/method consistency ... OK 
* checking replacement functions ... OK 
* checking foreign function calls ... OK 
* checking R code for possible problems ... OK 
* checking Rd files ... OK 
* checking Rd metadata ... OK 
* checking Rd line widths ... OK 
* checking Rd cross-references ... OK 
* checking for missing documentation entries ... OK 
* checking for code/documentation mismatches ... OK 
* checking Rd \usage sections ... OK 
* checking Rd contents ... OK 
* checking for unstated dependencies in examples ... OK 
* checking examples ... NONE 
* DONE 

Status: OK 

R CMD check results 
0 errors | 0 warnings | 0 notes 
+0

ありがとうございます。確かに。私はまた、ノートを削除する可能性を見つける:setOldClass(c( "stranger")) '私の見知らぬ人の生成関数の前に置く。賞金獲得のためにしばらくお待ちください。 –

+0

@EricLecoutreこれは助けてくれてうれしい! – duckmayr

関連する問題