2013-08-02 2 views
3

Je souhaite utiliser les fonctions des boîtiers Bioconductor hypergraph et hyperdraw sans charger les emballages. Lors de l'exécution d'un exemple de la vignette hyperdrawAppel de fonction R sans chargement du paquet

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) 

Je reçois l'erreur:

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

Si je tente de charger hyperedges:

hyperedges <- hyperdraw:::hyperedges 

Je reçois l'erreur

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

Lorsque je charge les deux paquets en utilisant library ou require, je n'obtiens aucune erreur (en exécutant le code ci-dessus sans hypergraph:: et hyperdraw::).

La raison pour laquelle je ne veux pas charger les paquets est parce que je suis construction d'un paquet qui utilise hyperdraw et hypergraph dans une seule fonction et je préfère mettre ces paquets dans Suggests que dans Depends dans mon dossier DESCRPTION.

Est-ce que quelqu'un a une idée pour résoudre ce problème?

+0

N'a pas essayé d'exécuter ceci mais essayez: 'hyperedges <- hyperdraw ::: hyperedges' –

+0

Cela donne aussi une erreur, voir le message édité – user1981275

+1

Si vous construisez un paquet qui utilise les fonctions' hyperdraw' et 'hypergraph 'même dans une seule fonction, vous devez ** les mettre dans votre fichier' DESCRIPTION' au moins comme 'Imports:' (ce qui est préférable à 'Depends:' dans tous les cas). Pour autant que je sache, il n'y a pas moyen de contourner cela. 'Suggests:' est pour les paquets utilisés uniquement dans les vignettes et les exemples. –

Répondre

5

HyperDraw a cela dans son fichier DESCRIPTION

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

et il se fondant sur la recherche hypergraph::hyperedges sur le chemin search(). Personnellement, je pense que l'hyperlien devrait inclure une ligne

importFrom(hypergraph, hyperedges) 

dans son fichier NAMESPACE. Actuellement, la meilleure chose à faire est d'ajouter Depends: hyperdraw à votre fichier DESCRIPTION, et à importFrom(hyperdraw, <whatever functions you need>). J'ai contacté le mainteneur de hyperdraw pour leur demander de mettre à jour le NAMESPACE comme ci-dessus; vous pourriez alors simplement Imports: hyperdraw. Je pense que vous faites juste du travail pour vous-même et frustrez vos utilisateurs en essayant d'utiliser Suggests ou d'autres approches pour contourner le besoin de dépendances formelles.

+0

Ok, si je comprends bien, 'hyperedges 'n'est pas exporté par' hyperdraw'? Je l'ai fait fonctionner maintenant avec 'hyperdraw' dans Depends et' hypergraph' dans Imports et je charge toutes les fonctions dont j'ai besoin dans mon 'NAMESPACE'. Je suppose que je vais continuer comme ça pour le moment. Merci beaucoup! – user1981275