【问题标题】:R using s3 and s4 methods of simulate in the same packageR 在同一个包中使用 s3 和 s4 方法进行模拟
【发布时间】:2012-02-11 15:58:24
【问题描述】:

我对这个错误感到困惑

found an S4 version of 'simulate' so it has not been imported correctly 

我编写了一个 R 包,其中包含一个将模拟 () 方法定义为 S3 方法的定义。因为已经定义了模拟的泛型,所以我只定义了一个模拟.myclass(在我的例子中是simulate.fitContinuous)。

该软件包还依赖于另一个具有 S4 版本模拟的软件包。加载我的包时,我收到上面的 S4 版本错误。我不确定是什么导致了错误。

抓取package from 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 方法(如上)。然后一切都按预期工作,但警告消息仍然存在。

【问题讨论】:

  • 请注意,使用依赖而不是导入,并保持 S3method(simulate, test) 行不会产生任何错误,但也不会产生正确的行为。

标签: r devtools roxygen s4


【解决方案1】:

simulate 是在stats 中定义的 S3 泛型,因此根据“编写 R 扩展”的第 1.6.2 节(示例不清楚——base 中定义的泛型有例外)您的NAMESPACE 文件应该有

importFrom(stats, simulate)
S3method(simulate, fitContinuous)

关于“找到 S4 方法”的业务似乎反映了问题何时被发现——尝试将 S4 方法添加到不可见的 S3 泛型(我猜“它”指的是泛型 simulate )。

【讨论】:

  • 在我的命名空间中导入的“ouch”包使 stats 成为 s4 方法,这给了我这个错误。在不加载 ouch 的情况下尝试 showMethods("simulate"),你会被告知它不是 s4 方法。加载库(哎哟); showMethods("simulate") 然后模拟现在是 S4 方法。不知道如何解决这个问题,s4 错误消息仍然存在。
  • 我的回答好像不正确,也没有立竿见影的解决办法;对不起,错误信息。我推测一种解决方法是选择性地 importFrom ouch(而不是导入模拟),或者在模拟上定义一个 S4 方法,但这些都不是必需的,IMO。
  • 嗯。 ouch 包已经定义了一个模拟 s4 方法。我需要使用那个包的模拟方法,所以导入它不是一个选项...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多