55

短いバージョン:を使用Normalしてパッケージ内のドキュメントをエミュレートできますか?statsroxygen

ロングバージョン:私はパッケージに取り組んでおり、グループへの一般的な参照となる1つの見出しの下に収集された共通の入力/パラメーターを持つ多くの関数を持つことにより、ドキュメントを読みやすくしようとしていました. 各機能は、エンド ユーザーが個別に利用できる必要があります。

Normal私はインスピレーションとして、正規分布に関連する多くの方法を提供するドキュメントを参考にしましたstats::dnorm()

検索すると、エクスポートされた関数またはオブジェクトではないように見えます?dnormが、ヘルプ セクションの名前がわかりました。NormalNormal

私が試したのは、次のものをに入れることfuns.Rです:

##' @rdname funs
##' @name funs
##' @aliases sum1
##' @aliases prod1
##' @title Two functions
##' @param x X
##' @param y Y
##' @return sum1 returns x+y
##' \cr
##' prod1 returns x*y
##' @examples
##' sum1(3,4)
##' prod1(3,4)
##' @export
sum1 <- function(x,y) x+y
##' @export
##' @rdname funs
prod1 <- function(x,y) x*y

次に、上記で実行roxygen2します。問題は、R CMD checkこの最小パッケージで実行すると、パッケージを としてロードできないことが判明することundefined exports: funsです。行を削除すると##' @name funs、パッケージは通過しますがR CMD check、ヘルプ セクションの名前sum1funs. 例のセクションの下に次を追加すると:

##' @export
funs <- function(x) x

それは成功し、希望どおりにフォーマットされたヘルプが表示されますが、名前を正しく表示するために意味のない関数をエクスポートしています。

のソースヘルプファイルを調べてみましたstatsが、.Rdx表示方法がわからない形式になっています。

また、関連して、 とはどのようなものです Normalか?

require(stats)
getAnywhere("Normal")
> no object named 'Normal' was found

アップデート:

@TylerRinker - これは私が最初に試したものではないかと思います。これにより、関数が1つの.Rdファイルに結合されますが、関連するヘルプの名前は最初の関数の名前と同じです。これは私が避けようとしていたものです:

##' sum
##' gives the sum
##' @param x X
##' @param y Y
##' @return sum1 returns x+y
##' @examples
##' sum1(3,4)
##' @rdname funs
##' @export
sum1 <- function(x,y) x+y
##' product
##' gives the product
##' @return prod1 returns x*y
##' @examples
##' prod1(3,4)
##' @rdname funs
##' @export
prod1 <- function(x,y) x*y

@Andrie - この解決策はまったく同じ問題を引き起こします。ヘルプの名前は最初の関数と同じです。

もしかしたらこれしか出来ない…

4

2 に答える 2

26

これは私が見つけた最良の回避策ですが、より良いものがあれば、受け入れられた回答を喜んで変更します...

##' @name funs
##' @aliases sum1
##' @aliases prod1
##'
##' @title Two functions of x and y
##'
##' @param x =X
##' @param y =Y
##'
##' @note \code{funs} is a generic name for the functions documented.
##' \cr
##' If called, \code{funs} returns its own arguments.
##'
##' @rdname funs
##' @export
funs <- function(x,y) {identity(c(x,y))}
##'
##' @rdname funs
##' @return \code{sum1(x,y)} returns x+y
##' @examples
##' sum1(3,4)
##' @export
sum1 <- function(x,y) x+y
##'
##' @rdname funs
##' @return \code{prod1(x,y)} returns x*y
##' @examples
##' prod1(3,4)
##' @export
prod1 <- function(x,y) x*y

@usageこれを報告可能なバグにするのを避けるために、書式設定では の使用を避けることに注意してください。

これがgithubでどのように対処されたかを見ることができます。

使用するより良い解決策@usageは、次の行を追加することです。

##' @usage funs(x,y) A nominal function of x and y

の最初の使用後

##' @rdname funs
##' @export

しかし、私はノーを最小限に抑えようとしています。R CMD check特に以下の権限をなだめるために投げられた警告の:

 Functions with \usage entries need to have the appropriate \alias
    entries, and all their arguments documented.
    The \usage entries must correspond to syntactically valid R code.

これは@usage.

どうもありがとう。

于 2013-04-14T06:01:08.343 に答える
25

私の知る限り、.Rd ファイルに 3 つの名前を文書化する唯一の方法は、あなたが行ったように 3 つの実際のオブジェクトを文書化することです。しかし、秘訣は次のとおりです。そのうちの 1 つをエクスポートすることもNULL、エクスポートしないこともできます。

##' @name funs
##' @rdname funs
##'
##' @title Two functions of sum1 and prod1
##'
##' @param x =X
##' @param y =Y
##'
##' @return x*y (prod1) or x+y (sum1).
NULL

##' @rdname funs
##' @examples
##' sum1(3,4)
##' @export
sum1 <- function(x,y) x+y

##' @rdname funs
##' @examples
##' prod1(3,4)
##' @export
prod1 <- function(x,y) x*y

かなりハックに見えますが、機能します。

于 2013-12-02T22:15:23.720 に答える