Я всегда предполагал, что наличие пакета в поле "Зависимости" автоматически также импортирует пространство имен. Однако, похоже, что в R 2.15 зависимости не становятся доступными до тех пор, пока пакет не будет привязан к пути поиска. Это предполагаемое поведение?
Проблема возникает следующим образом: предположим, что есть пакет "Child", который зависит, но явно не импортирует пакет под названием "Parent" и содержит функцию, вызывающую объект в пространстве имен "Parent" . Затем, когда эта функция вызывается без фактического прикрепления "Child", функция в "Parent" не может быть найдена.
Вот пример из руководства пакета bigdata
, но проблема очень распространена:
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)
Пример невозможен, поскольку lasso.stars зависит от "glmnet", который не загружается до тех пор, пока bigdata
не будет прикреплен. Единственный способ вызвать lasso.stars
- это фактически прикрепить пакет bigdata
:
library(bigdata)
z1 = bigdata::lasso.stars(x,y)
Теперь, чтобы еще больше усложнить ситуацию, кажется, что эта проблема унаследована к любому пакету "внук", который импортирует в этом случае функцию lasso.stars. Мне трудно найти хороший пример, но я уверен, что они там.
Это ошибка? Я знаю, что этого можно избежать, попросив авторов пакетов использовать Импорт вместо Depends, но на практике большинство пакетов на CRAN по-прежнему используют Depends. Похоже, что проблему легко избежать, если R автоматически импортирует пространство имен любых пакетов Depends в пространство имен дочерних пакетов.