5

エラーで困っています

found an S4 version of 'simulate' so it has not been imported correctly 

S3 メソッドとして、simulate() メソッドの定義を含む R パッケージを作成しました。シミュレートのジェネリックは既に定義されているため、 simulate.myclass (私の場合は simulate.fitContinuous) を定義するだけです。

このパッケージは、シミュレートの S4 バージョンを含む別のパッケージにも依存しています。パッケージをロードすると、上記の S4 バージョン エラーが発生します。何がエラーを生成しているのかわかりません。

github からパッケージを取得するか、実行することによる再現可能な例

require(devtools) 
install_github("pmc", "cboettig")
require(pmc)

このエラーを最初から再現するには: 最小限の DESCRIPTION ファイルで新しいパッケージを作成します。説明のインポートを含めます: 痛い。NAMESPACE を作成し、imports(ouch) と S3method(simulate, test) を追加します。R ディレクトリを作成し、簡単な R スクリプトを追加します (前述の名前空間を生成する roxygen のドキュメントを含めましたが、このエラーは devtools/roxygen がなくても作成される可能性があります)。

#' simulate
#' 
#' a test for s3/s4 conflicts
#' @param object who cares?
#' @param nsim guess.
#' @param seed yup
#' @param ... other parameters we will just ignore
#' @return something
#' @method simulate test
#' @S3method simulate test
#' @import ouch
simulate.test <- function(object, nsim = 1, seed = NULL, ...){
  message("This test worked")
}

パッケージをインストールすると (必要に応じて最初に devtools をドキュメント化してください)、エラーが発生します。

これまでの私の最善の解決策は、NAMESPACE から S3method 行を削除し、代わりに完全な関数の simulate.test をエクスポートすることです。これは警告なしでチェックとインストールに合格しますが、明らかに劣ったソリューションです。

別の解決策は、インポートと同様に依存関係を持ち、S3 メソッドを適切に文書化することです (上記のように)。その後、すべてが期待どおりに機能しますが、警告メッセージは残ります。

4

1 に答える 1

4

simulateで定義されている S3 ジェネリックでstatsあるため、「Writing R Extensions」のセクション 1.6.2 によると (例は明確ではありません - で定義されているジェネリックには例外がありbaseます)、NAMESPACE ファイルには

importFrom(stats, simulate)
S3method(simulate, fitContinuous)

「S4メソッドを見つけた」というビジネスは、問題が発見された時期を反映しているようです-表示されていないS3ジェネリックにS4メソッドを追加しようとしています(「それ」はジェネリックを参照していると思いますsimulate)。

于 2012-01-16T19:37:19.923 に答える