2010-01-29 5 views
26

J'essaie de modifier la fonctionnalité de quelques commandes dans un paquet dans R. Il est assez facile de voir la source des commandes. Toutefois, la fonction appelle d'autres fonctions qui se trouvent dans l'espace de noms du package. Ces fonctions ne sont pas des objets exportés. Alors, comment puis-je y accéder?R: appeler une fonction à partir d'un espace de noms

Exemple spécifique: Comment accéder à la fonction asCall() utilisée dans copula :: rmvdc?

require(copula) 
copula::rmvdc 
getAnywhere("asCall") 

si as.Call() existe dans le package copule, mais comment puis-je accéder?

> copula::asCall 
Error: 'asCall' is not an exported object from 'namespace:copula' 

Répondre

61

Essayez ceci:

copula:::asCall 

Ce fut previously answered on R-help. Cette fonction n'a pas été exportée dans l'espace de noms du package, vous devez donc utiliser l'opérateur ::: à la place. Généralement, les fonctions ne sont pas exportées lorsqu'elles ne sont pas destinées à un usage général (par exemple, vous n'avez pas besoin de les documenter dans ce cas).

+12

Je ne peux pas le croire ... J'ai essayé copule: asCall puis copule :: asCall et dit "bien hellifiknow" –

13

En cours de développement,? assignInNamespace est très utile.

Cela vous permet d'injecter une nouvelle copie d'une fonction non exportée dans l'espace de noms d'un package.

Ce serait bien si le message d'erreur de R était plus utile. Au lieu de:

Error: 'matrixToPaths' is not an exported object from 'namespace:OpenMx' 

Pourquoi ne pas ajouter:

You might try OpenMx:::matrixToPaths" 
+0

« pourquoi ne pas add ... "parce que vous n'êtes pas censé accéder aux objets privés d'un paquet. C'est pourquoi on les appelle "privés". En fait, on pourrait se demander pourquoi l'opérateur ':::' existe même. –

Questions connexes