2012-05-11 12 views
10

Siempre he asumido que tener un paquete en el campo 'Depends' también automáticamente importar el espacio de nombres. Sin embargo, parece que en R 2.15, las dependencias no están disponibles hasta que el paquete es realmente conectado al searchpath. ¿Es este comportamiento intencionado?Problemas de dependencia del paquete R cuando el espacio de nombres no está adjunto

El problema aparece de la siguiente manera: Supongamos que hay un paquete de 'Niño', que Depende, pero no de forma explícita importación un paquete llamado 'padre' y contiene una función que llama a un objeto en el espacio de nombres de 'Padre'. Luego, cuando se llama a esta función sin adjuntar 'Niño', no se puede encontrar la función en 'Padre'.

Aquí un ejemplo en el manual del paquete bigdata, pero el problema es muy extendido:

x = matrix(rnorm(50*80),50,80) 
beta = c(3,2,1.5,rep(0,77)) 
y = rnorm(50) + x%*%beta 
z1 = bigdata::lasso.stars(x,y) 

El ejemplo falla porque lasso.stars depende de 'glmnet' que no se carga hasta que bigdata se adjunta. La única manera de ser capaz de llamar a lasso.stars es conectar en realidad el bigdata paquete:

library(bigdata) 
z1 = bigdata::lasso.stars(x,y) 

Ahora para complicar aún más las cosas, parece que este problema se hereda a cualquier paquete 'nieto' que importaciones en este caso la función lasso.stars. Me cuesta encontrar un buen ejemplo, pero estoy seguro de que están ahí afuera.

¿Esto es un error? Sé que se puede evitar pidiendo a los autores del paquete que utilicen Imports en vez de Depends, pero en la práctica la mayoría de los paquetes en CRAN todavía usan Depends. Parece que el problema se evita fácilmente si R importará automáticamente el espacio de nombres de cualquier paquete Depends en el espacio de nombres del paquete secundario.

+0

1 Muy buena pregunta. Es uno de los que he pensado en abordar, pero me he desanimado, pensando que es mejor plantearse en R-devel (ya que creo que los miembros del R-core son los únicos que pueden resolver esto). Deben haberlo discutido, pero he buscado rápidamente varias veces y no he visto ninguna mención de ello, lo cual parece extraño ... –

+0

@Jeroen, ¿podría darnos el ejemplo? Cuando intento 'library (xts)', las funciones de exportación de 'zoo' se cargan automáticamente. – kohske

+0

@kohske el ejemplo está en el tema. El paquete 'xts' tiene un archivo NAMESPACE en el que importa manualmente las funciones requeridas de' zoo'. Por lo tanto, no tiene el problema, creo. – Jeroen

Respuesta

2

Para aquellos que estén interesados, la discusión continúa here en la lista de correo r-devel:

Cuestiones relacionadas