R: вызов функции из пространства имен - PullRequest
27 голосов
/ 30 января 2010

Я пытаюсь изменить функциональность нескольких команд в пакете в R. Достаточно легко увидеть источник команд. Однако функция вызывает другие функции, которые находятся в пространстве имен пакета. Эти функции не являются экспортируемыми объектами. Так как я могу получить к ним доступ?

конкретный пример: Как мне получить доступ к функции asCall (), которая используется в copula :: rmvdc?

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

так что as.Call() существует в пакете copula, но как мне получить к нему доступ?

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

Ответы [ 2 ]

64 голосов
/ 30 января 2010

Попробуйте это:

copula:::asCall

Это было ранее на R-help . Эта функция не была экспортирована в пространство имен пакета, поэтому вместо нее нужно использовать оператор :::. Обычно функции не экспортируются, если они не предназначены для общего использования (например, вам не нужно документировать их в этом случае).

12 голосов
/ 06 февраля 2012

При разработке очень полезно использовать assignInNamespace .

Это позволяет вам вставить новую копию неэкспортированной функции в пространство имен пакета.

Было бы хорошо, если бы сообщение об ошибке R было более полезным. Вместо:

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

Почему бы не добавить:

You might try OpenMx:::matrixToPaths"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...