R-Roxygen2不';在重新生成时看不到更新的包定义&;重新加载

R-Roxygen2不';在重新生成时看不到更新的包定义&;重新加载,r,package,roxygen2,R,Package,Roxygen2,例如,作为一个简单的工作示例,假设我构建了以下包Test: # In R\Test.R : #' @import methods #' @exportClass C C <- setClass("C") 在RStudio中执行“构建和重新加载”时,我会得到错误 ==> roxygenize('.', roclets=c('rd', 'collate', 'namespace')) * checking for changes ... ERROR Error in getRef

例如,作为一个简单的工作示例,假设我构建了以下包
Test

# In R\Test.R :
#' @import methods 
#' @exportClass C
C <- setClass("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,以便在重建之前运行,这样,如果我的
@export
等发生更改,我的命名空间文件将自动更新

  • Roxygen2 3.0.0
    • 使用roxygen生成(在RStudio中):
      • Rd文件
      • 对照场
      • 名称空间文件
    • 运行时自动氧化(在RStudio中):
      • R指令检查
      • 源代码和二进制包构建
      • 构建和重新加载
  • R:3.0.2(飞盘航行)
  • IDE:RStudio 0.98.490
  • 操作系统:Windows 8.1

重新启动R-请参阅会话菜单。如果你正在制作软件包,你应该学习重新启动R键盘快捷键。谢谢@hadley,但这是否意味着我必须在每次重建和重新加载之前重新启动R,这样我才能保证roxygen功能的安全?!目前,作为一种解决方法,我在重新生成和重新加载包之前手动卸载包(通过取消选中RStudio“包”选项卡下的复选框)。然而,为什么这些变通办法是必要的呢?为什么roxygen看不到我更新包中的定义?为什么你要重新构建和重新加载,而不仅仅是重新记录?您的问题听起来更像是S4类缓存问题,您需要重新启动以解决该问题。我可能一天要重启几百次。这是包开发人员的一项非常重要的技术。这是因为我仍然在编写我的包,所以我的代码仍在不断变化,因此需要不时地进行重建。我不知道你必须经常重新启动R-谢谢你指出这一点。我的印象是,RStudio中的构建和重新加载与重新启动一样好。构建和重新加载将在完成时重新启动R,但如果它无法构建文档,那么它就不会完成,因此也不会重新启动。
> 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