R: вызов функции из пространства имен
Я пытаюсь изменить функциональность нескольких команд в пакете в 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'
Ответы
Ответ 1
Попробуйте следующее:
copula:::asCall
Это было ранее ответило на R-help. Эта функция не была экспортирована в пространство имен пакетов, поэтому вам нужно использовать вместо этого оператор :::
. Обычно функции не экспортируются, если они не предназначены для общего использования (например, вам не нужно документировать их в этом случае).
Ответ 2
При разработке, assignInNamespace очень полезно.
Это позволяет вам вводить новую копию неэкспортируемой функции в пространство имен пакетов.
Было бы неплохо, если бы сообщение об ошибке R было более полезным. Вместо:
Error: 'matrixToPaths' is not an exported object from 'namespace:OpenMx'
Почему бы не добавить:
You might try OpenMx:::matrixToPaths"