我对错误感到困惑
found an S4 version of 'simulate' so it has not been imported correctly
我编写了一个R包,其中包含一个simulate()方法的定义作为S3方法。因为已经定义了simulate的泛型,所以我只需在我的例子中定义一个simulate.myclass(simulate.fitContinuous)。
该软件包还依赖于具有S4版本模拟的另一个软件包。加载我的包时,我得到上面的S4版本错误。我不确定是什么导致错误。
的可重复示例require(devtools)
install_github("pmc", "cboettig")
require(pmc)
从头开始重现此错误:创建一个包含最少DESCRIPTION文件的新包。包括DESCRIPTION进口:ouch。创建一个NAMESPACE并添加导入(ouch)和S3method(模拟,测试)。创建R目录,添加一个简单的R脚本(我已经包含了生成NAMESPACE的roxygen文档,我刚刚提到过,但是这个错误也可以在没有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中删除S3方法行,并导出完整的函数simulate.test。这将通过检查和安装而不会发出警告,但显然是一个较差的解决方案。
另一种解决方案是使用依赖以及导入,并正确记录S3方法(如上所述)。然后一切都按预期工作,但警告信息仍然存在。
答案 0 :(得分:4)
simulate
是stats
中定义的S3泛型,因此根据“编写R扩展”的第1.6.2节(示例不清楚 - 在{中定义的泛型有例外) {1}})您的NAMESPACE文件应该
base
关于“发现S4方法”的业务似乎反映了何时发现问题 - 尝试将S4方法添加到不可见的S3通用中(“it”我猜是指通用{{1 }})。