【问题标题】:R function call without loading package不加载包的R函数调用
【发布时间】:2013-08-03 15:53:32
【问题描述】:

我想在不加载包的情况下使用 Bioconductor 包 hypergraphhyperdraw 中的函数。从hyperdraw 小插图运行示例时

dh1 <- hypergraph::DirectedHyperedge("A", "B", "R1")
dh2 <- hypergraph::DirectedHyperedge(c("A", "B"), c("C", "D"), "R2")
hg <- hypergraph::Hypergraph(LETTERS[1:5], list(dh1, dh2))
hgbph <- hyperdraw::graphBPH(hg)

我得到错误:

Error in hyperdraw::graphBPH(hg) : could not find function "hyperedges"

如果我尝试加载hyperedges:

hyperedges <- hyperdraw:::hyperedges

我得到了错误

Error in get(name, envir = asNamespace(pkg), inherits = FALSE) : 
  object 'hyperedges' not found

当我使用libraryrequire 加载两个包时,我没有收到任何错误(在没有hypergraph::hyperdraw:: 的情况下运行上述代码)。

我不想加载包的原因是因为我正在构建一个仅在一个函数中使用hyperdrawhypergraph 的包,我宁愿将这些包放入Suggests 而不是放入@987654336 @ 在我的DESCRPTION 文件中。

有人知道如何解决这个问题吗?

【问题讨论】:

  • 尚未尝试运行此程序,但请尝试:hyperedges &lt;- hyperdraw:::hyperedges
  • 这也会出错,请参阅编辑后的帖子
  • 如果您构建的包在单个函数中使用来自 hyperdrawhypergraph 的函数,您必须将它们至少作为Imports:(在任何情况下都优于Depends:)。据我所知,没有办法解决这个问题。 Suggests: 仅用于小插图和示例中的包。
  • @Ben Bolker:我明白了,我只是重新阅读了“编写 R 扩展”中的部分

标签: r package function-calls bioconductor


【解决方案1】:

hyperdraw 在它的说明文件中有这个

Depends:      R (>= 2.9.0), methods, grid, graph, hypergraph, Rgraphviz

它依赖于在search() 路径上找到hypergraph::hyperedges。就个人而言,我认为 hyperdraw 应该包括一行

importFrom(hypergraph, hyperedges)

在它的 NAMESPACE 文件中。目前,最好的办法是将Depends: hyperdraw 添加到您的DESCRIPTION 文件和importFrom(hyperdraw, &lt;whatever functions you need&gt;)。我已经联系了 hyperdraw 的维护者,要求他们按上述方式更新 NAMESPACE;然后你可以只Imports: hyperdraw。我认为您只是在为自己工作,并通过尝试使用 Suggests 或其他方法来破坏对正式依赖项的需求,从而使您的用户感到沮丧。

【讨论】:

  • 好吧,如果我理解正确的话,hyperedges 不是由hyperdraw 导出的吗?我现在可以使用 Depends 中的 hyperdraw 和 Imports 中的 hypergraph 运行它,并在我的 NAMESPACE 中加载我需要的所有功能。我想我会暂时保持这种状态。非常感谢!
猜你喜欢
  • 2016-12-23
  • 1970-01-01
  • 2015-04-30
  • 1970-01-01
  • 2019-04-28
  • 1970-01-01
  • 1970-01-01
  • 2022-01-05
  • 2020-09-04
相关资源
最近更新 更多