2013-08-02 48 views
3

我想在不加載包的情況下使用Bioconductor包hypergraphhyperdraw中的函數。從hyperdraw小品文運行的例子當不帶加載包的R函數調用

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比爲DependsDESCRPTION文件。

有沒有人有一個想法如何解決這個問題?

+0

有沒有試圖運行這個,但嘗試:'hyperedges < - hyperdraw ::: hyperedges' –

+0

這也給出了一個錯誤,請參閱編輯後 – user1981275

+1

如果你建立一個使用'hyperdraw'和'hypergraph '即使在一個函數中,你也必須把它們放在你的'DESCRIPTION'文件中,至少是'Imports:'(在任何情況下都優先於'Depends:')。據我所知,這是沒有辦法的。 '建議:'只適用於小插曲和例子。 –

回答

5

hyperdraw有這個在它的說明文件

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

而且它依賴於search()路徑上尋找hypergraph::hyperedges。就個人而言,我認爲應該hyperdraw包括線

importFrom(hypergraph, hyperedges) 

在它的命名空間的文件。目前,最好的做法是將Depends:hyperdraw添加到您的DESCRIPTION文件中,並添加到importFrom(hyperdraw, <whatever functions you need>)。我已經聯繫了hyperdraw的維護人員,要求他們更新上面的NAMESPACE;那麼你可以只是Imports: hyperdraw。我認爲你只是爲自己做工,並試圖使用建議或其他方法來顛覆對正式依賴的需求,從而令用戶感到沮喪。

+0

好吧,如果我理解正確,'hyperredges'不會被'hyperdraw'導出?我現在用'hyperdraw'運行在Imports中的Depends和'hypergraph'中,並且在我的'NAMESPACE'中加載了我需要的所有函數。我想現在我會保持這種狀態。非常感謝! – user1981275