【问题标题】:How to update function code in an R package?如何更新 R 包中的功能代码?
【发布时间】:2019-12-21 12:31:07
【问题描述】:

我使用 roxygen2 开发工具创建并下载了一个 R 包。当我更新源代码 R 文件时,文档更新正常,但功能代码本身没有。使用 install.packages("package-name") 重新安装包时,如何获取要更新的功能代码?

我尝试使用 stop("...") 在每个函数的开头插入错误消息。当我重新安装代码时,这些函数不会按应有的方式输出错误消息,而是按我更新代码之前的方式工作。

每次更新代码时,我都会使用以下命令:

devtools::document()
devtools::install()

install.packages("package-name", repos=NULL, type="source")
library(package-name)

只是为了获得更多信息,当我尝试以这种方式安装软件包时:

install.packages("package-name")

我收到以下错误消息:

Warning in install.packages :
  package ‘package-name’ is not available (for R version 3.6.0)

当我的 R 版本是 3.6.0 时,甚至现在更新到 3.6.1 之后,我也收到了同样的错误消息

我没有将包上传到任何存储库,所以我认为这是有道理的,而是使用 repos=NULL 从我的包文件本地安装它。

#' Roxygen comments - this part updates
#'
#' etc.
functionName <- function(...) {
 stop("...") 
 ...
 # This function should crash with an error message every time it is called, 
 # but instead the function body is never updated.
}

重新安装包后,我希望函数的输出是错误消息,但它们输出的结果与我更新包之前的结果相同。

文档更新,函数体没有。

【问题讨论】:

  • 显然您使用的是 RStudio,在构建面板中单击“安装并重新启动”会得到什么?
  • 原来问题与 R 版本错误无关,而是阻止源代码更新的抑制警告。我在下面发布了对我有用的解决方案。

标签: r rstudio devtools roxygen2 rtools


【解决方案1】:

原来我找到了自己问题的答案...

问题在于我收到了一条警告消息:

Warning message: 
In body(fun) : argument is not a function

尽管从未使用过body(),但该函数在内部某处被调用,并且警告阻止了代码更新(但由于某种原因,文档仍在更新)。

使用rm(list=ls()) 清除我的全局环境清除了我的错误。

【讨论】:

    猜你喜欢
    • 2019-07-09
    • 2021-12-18
    • 2020-06-13
    • 2017-11-18
    • 2016-02-08
    • 1970-01-01
    • 1970-01-01
    • 2021-06-25
    • 1970-01-01
    相关资源
    最近更新 更多