Подтвердить что ты не робот

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'
4b9b3361

Ответ 1

Попробуйте следующее:

copula:::asCall

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

Ответ 2

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

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

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

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

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

You might try OpenMx:::matrixToPaths"