11

roxygen を使用して独自のパッケージを作成しています。問題を引き起こしている関数があります:

##' extract.sig.metadata
##' @param foo bar
##' @author me
##' @export
extract.sig.metadata <- function(foo){
# does stuff
}

パッケージのスケルトンを (devtools の create(my-package) で) 作成し、document() を使用して roxygen タグを処理しました。ただし、パッケージをインストールしようとすると失敗します。

... *ヘルプ インデックスのインストール ** パッケージ インデックスの構築 ** インストールされたパッケージをロードできるかどうかのテスト エラー: 名前空間 'my-package' のロード中にオブジェクト 'extract' が見つかりません エラー: ロードに失敗しました 実行が停止しました

roxygen は、extract.sig.metadata が S3 メソッド、つまり export() の特殊な形式であると考えていると確信していますが、関数 export() が見つからないため、壊れています。しかし、これは s3 メソッドではなく、単なる extract.sig.metadata という関数です。Rd コードを見ると、/usage タグが奇妙に見えます。

\usage{
\method{extract}{sig.metadata}(spec.df, var = "product_name",
  ratio.cutoff = 0.001, prob.modifer = 3, frequency.cutoff = NA,
  verbose = F, assign.to.global.env = FALSE, use.bigrams = T, clean = T,
  ngram.dupe.n.cutoff = 0.1, max.obs = 10000)
}

名前をextractSigMetadataに変更すると、問題は技術的に修正され、.Rdコードが変更されます。

\usage{
 extractSigMetadata(foo)
}

しかし、関数の名前を変更する必要はありません (私のパッケージには同じ問題を抱えている関数がたくさんあり、それらは多数のスクリプトで使用されています。名前を変更するのは非常に面倒です)スキーマではない)。

---> これが単なる通常の関数であり、変な s3 メソッドではないことを roxygen に伝える方法を知っている人はいますか? @method タグと関係があると思いますが、これを機能させるのに十分な適切な使用方法がわかりません。ありがとう!!!

4

1 に答える 1

10

修正しました!

@export extract.sig.metadataの代わりに使用する@exportと、roxygen に extract.sig.metadata が関数名全体であることを明らかに伝え、これで問題が解決します。この特定のケースでは、一般的な抽出機能はありませんでしたが、R.utils (私のパッケージが依存していなかったにもかかわらず読み込まれたパッケージ) には抽出機能がありました。

これが将来同じ問題を抱えている人に役立つことを願っています。ありがとう!

PS Hadley は、より良い命名方法を提案しており、私は将来これに従おうとしています。

于 2014-06-27T15:54:23.007 に答える