【问题标题】:How to import `as<-`?如何导入`as<-`?
【发布时间】:2016-05-12 02:48:54
【问题描述】:

在开发 R 包时,如何为 S4 类导入 as() 方法?

更多细节:我需要将邻接矩阵转换为 graphNEL 对象(来自graph 包)。这是这样做的代码:

library("graph")
m <- rbind(
c(0, 0, 0, 0),
c(1, 0, 0, 0),
c(0, 1, 0, 0),
c(0, 0, 1, 0)
)
gr <- as(m, "graphNEL")

不幸的是,此代码在 R 包中失败:

Error in as(m, "graphNEL") : 
no method or default for coercing “matrix” to “graphNEL”

问题似乎是导入所需的as() 方法,但我似乎无法弄清楚如何执行此操作。请注意,如果图形包包含在 Imports 中,这仍然会失败。

【问题讨论】:

  • as()graph 的一部分,还是methods - methods::as 的一部分?
  • methods::as 也不起作用。 as 的定义相当复杂(参见 ?as),而且我承认我对 S4 类不够熟悉,无法自己弄清楚这一点......

标签: r oop package s4


【解决方案1】:

如果您指定包含as():: 的包,它应该可以工作。

试试这个:

gr <- graph::as(m, "graphNEL")

只是为了将所有信息保存在一个地方。
图形包已从 CRAN 中删除,现在只能通过 Bioconductor 获得。据我所知,Bioconductor 包不会仅仅通过将它们放入导入中来导入。

这篇文章建议相同:CRAN Package Depends on Bioconductor Package Installing error

在测试之前导入 Bioconductor 软件包的软件包期间,这些软件包可能已经安装在您正在测试的系统上。但是,如果是这样的话,那么我认为这里也是如此。因此,我的解决方案可能无法解决您的问题。

【讨论】:

  • 这是我的第一个猜测,但不幸的是它不起作用——你会得到同样的错误。这实际上是有道理的,因为图形包没有明确导出任何称为“as”的方法。一般来说,我相信委托 as 方法的包不会显式导出它。
  • 可以肯定的是,当graph 包在您的 Imports 中时,您尝试过此操作? (听起来答案还没有,但只是检查。)
  • 是的,图表在 Imports 中。 (不用担心,清楚这些事情总是好的。)
  • 从网上看,graph 包似乎已从 CRAN 中删除,现在只能通过 Bioconductor 获得。不幸的是,Bioconductor 包不会仅仅通过将它们放入导入中来导入。据我所知,在运行依赖于它的包中的代码之前,您需要让用户手动安装包。
  • 嗯...我已经编写了其他包含导入中列出的 Bioconductor 包(包括图表)的包,它们的行为与其他 CRAN 包完全相同。据我所知,这是一个 S4 问题,而不是图表或 Bioconductor 问题。但我可能是错的......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-04
  • 2014-08-27
  • 1970-01-01
  • 2012-10-22
  • 2019-02-12
相关资源
最近更新 更多