我对错误感到困惑
found an S4 version of 'simulate' so it has not been imported correctly
我编写了一个 R 包,其中包含一个作为 S3 方法的模拟()方法的定义。因为已经定义了模拟的泛型,所以我只定义了一个模拟.myclass(在我的例子中是模拟.fitContinuous)。
该软件包还依赖于另一个具有 S4 版本模拟的软件包。加载我的包时,我收到上面的 S4 版本错误。我不确定是什么导致了错误。
通过从 github获取包的可重现示例,或者执行
require(devtools)
install_github("pmc", "cboettig")
require(pmc)
要从头开始重现此错误:使用最少的说明文件创建一个新包。包括说明进口:哎哟。创建一个 NAMESPACE 并添加 imports(ouch) 和 S3method(simulate, test)。创建 R 目录,添加一个简单的 R 脚本(我已经包含了 roxygen 文档,它将生成我刚才提到的 NAMESPACE,但是这个错误也可以在没有 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 行,并导出完整的函数模拟.test。这将通过检查并在没有警告的情况下安装,但显然是一个较差的解决方案。
一个不同的解决方案是在依赖和导入中添加 ouch,并正确记录 S3 方法(如上)。然后一切都按预期工作,但警告消息仍然存在。