4

たとえば、最小限の作業例として、次のパッケージをビルドしたとしますTest

# In R\Test.R :
#' @import methods 
#' @exportClass C
C <- setClass("C")

そして今、私は次のように変更setClasssetRefClassます:

C <- setRefClass("C")

(RStudioで)「ビルドとリロード」を実行すると、エラーが発生します

==> roxygenize('.', roclets=c('rd', 'collate', 'namespace'))

* checking for changes ... ERROR

Error in getRefClass(class) : 
  class �C� is defined but is not a reference class

もちろん、まだリファレンス クラスではありませんが、更新されたパッケージではリファレンス クラスになります。古いクラス定義をチェックしても、奇妙な警告が表示されます。

> getClass("C")
Virtual Class "C" [package "Test"]

No Slots, prototype of class "NULL"
Warning message:
In .recacheSubclasses(def@className, def, doSubclasses, env) :
  undefined subclass "C" of class "refObject"; definition not updated

Roxygen は私の新しい定義を無視しているようCで、古いクラス定義はまだ有効です。Roxygen を新しい定義に集中させ、再構築を成功させるにはどうすればよいですか?

(この問題は特定のものではないことに注意してくださいsetClass。例として使用しているだけです。)

私のセットアップ:

再構築する前に RStudio で Roxygen をセットアップして実行し、@exports etc が変更された場合に NAMESPACE ファイルが自動的に更新されるようにします。

  • Roxygen2 3.0.0
    • roxygen を使用して生成します (RStudio で):
      • Rd ファイル
      • 照合フィールド
      • 名前空間ファイル
    • 実行時に自動的に roxygenising (RStudio で):
      • R CMD チェック
      • ソースおよびバイナリ パッケージのビルド
      • ビルド&リロード
  • R: 3.0.2 (フリスビーセーリング)
  • IDE: RStudio 0.98.490
  • OS: Windows 8.1
4

0 に答える 0