NAMESPACEファイルを作成するためにdevtools :: document()を使用してR
パッケージを開発しています。関数のいくつかはサマリー、予測、プロット、印刷用のS3メソッドであり、汎用はbase
またはstats
です。 Hadleyが推奨するように@exportを使用していますが、これはNAMESPACEの正しいS3methodエントリにつながり、パッケージはすべてのチェックを-as-cranに渡します。しかし、関数はNAMESPACEでエクスポートされないので、print.myclassを呼び出すことはできません(NAMESPACEを乱雑にするのを避けるために望ましい動作です)。ただし、Mypackage :: print.myclassで関数を呼び出すと、関数がMypackage
からエクスポートされたオブジェクトではないというエラーが発生します。NAMESPACEのS3メソッドがエクスポートされていません
質問:正しい動作ですか?または、関数をエクスポートするために必要な他のステップがありますか? @method print Myclassと@exportの両方を追加しようとしましたが、運がありません。 R 3.4.2とdevtools
の使用MAC OS X 10.12.6での1.13.3
ありがとう! Merlise
編集は:追加されたコード/エクスポート方法およびエクスポート機能を持つように更新
簡単な例 - 機能とRStudioにスケルトンパッケージをビルド:名前空間は、今持っている
#' test for export of S3 methods
#'
#' @title "print hello world for any object"
#' @param x object
#' @param digits optional number specifying the number of digits to display
#' @param ... other parameters to be passed to \code{print.default}
#' @export print.hello
#' @export
print.hello = function (x, digits = max(3, getOption("digits") - 3), ...)
{
cat("\n Hello World \n")
invisible()
}
# Generated by roxygen2: do not edit by hand
S3method(print,hello)
export(print.hello)
@exportを引数なしで使用すると、@export print.hello exportsこの関数はNAMESPACEにメソッドを追加しません(これはパッケージチェックでエラーにつながります)。両方を持つと、メソッドと関数をエクスポートすることができます。
を構築し、ロードした後、それはあなたが
print
の1回の呼び出しでprint.hello
を使用する場合は、この場合には、あなたがhello
のクラスを入れなければならないだろう、である、質問*以下の例を試してみてくださいそれは正しい行動ですか?*私は正しい行動だと思います。 – Suren