web-dev-qa-db-ja.com

1つの.Rdファイル内の複数の関数

Short versionNormalを使用して、パッケージstatsroxygenのドキュメントをエミュレートできますか?

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

私は、正規分布に関連するいくつかのメソッドを提供するNormalのドキュメントを参考にしています。 stats::dnorm()

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

私が試したのは、以下を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を渡しますが、ヘルプセクションの名前はfunsではなくsum1です。以下の例セクションの下に追加すると:

##' @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-この解決策はまったく同じ問題を引き起こし、ヘルプの名前は最初の関数と同じです。

おそらくこれは不可能です...

49
dardisco

これは私が見つけた最良の回避策ですが、何か良いものが出てきたら、受け入れられた回答を変更して喜んでいます...

##' @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のドキュメントを読んだときに発生したエラーの可能性があります。

どうもありがとう。

20
dardisco

私が理解している限り、3つの名前を.Rdファイルに文書化する唯一の方法は、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

かなりハックに見えますが、動作します。

21
Calimo