2010-01-29 33 views
26

Estoy tratando de alterar la funcionalidad de unos pocos comandos en un paquete en R. Es bastante fácil ver el origen de los comandos. Sin embargo, la función llama a otras funciones que están en el espacio de nombres del paquete. Estas funciones no son objetos exportados. Entonces, ¿cómo puedo acceder a ellos?R: llamando a una función desde un espacio de nombres

ejemplo específico: ¿Cómo accedería a la función asCall() que se utiliza en copula :: rmvdc?

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

por lo as.Call() existe en el paquete de la cópula, pero ¿cómo puedo acceder a él?

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

Respuesta

61

Prueba esto:

copula:::asCall 

Ésta era previously answered on R-help. Esa función no se exportó en el espacio de nombres del paquete, por lo que debe usar el operador ::: en su lugar. Normalmente, las funciones no se exportan cuando no están destinadas para uso general (por ejemplo, no es necesario que las documente en este caso).

+12

No puedo creer ... He intentado cópula: asCall entonces cópula :: asCall y luego dijo "bueno hellifiknow" –

13

Al desarrollar, ¿? assignInNamespace es muy útil.

Esto le permite inyectar una nueva copia de una función no exportada en el espacio de nombres de un paquete.

Sería bueno si el mensaje de error de R fue más útil. En lugar de:

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

Por qué no añadir:

You might try OpenMx:::matrixToPaths" 
+0

"¿por qué no agregue ... "porque se supone que no debe acceder a los objetos privados de un paquete. Es por eso que se llaman "privados". De hecho, uno podría preguntarse por qué el operador ':::' incluso existe. –

Cuestiones relacionadas