Проблемы с зависимостями пакета R, когда пространство имен не подключено

Я всегда предполагал, что наличие пакета в поле «Зависит» также автоматически импортирует пространство имен. Однако похоже, что в R 2.15 зависимости не становятся доступными до тех пор, пока пакет не будет фактически присоединен к пути поиска. Это предполагаемое поведение?

Проблема выглядит следующим образом :Предположим, что есть пакет «Дочерний», который Зависит , но не импортирует явно пакет с именем «Родительский» и содержит функцию, которая вызывает объект в пространстве имен «Родитель». Затем, когда эта функция вызывается без фактического прикрепления «дочерней», функция в «родительской» не может быть найдена.

Вот пример из мануала пакета 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. Мне трудно найти хороший пример, но я уверен, что они там.

Это ошибка? Я знаю, что этого можно избежать, попросив авторов пакетов использовать Imports вместо Depends, но на практике большинство пакетов в CRAN по-прежнему используют Depends. Кажется, что проблемы легко избежать, если R будет автоматически импортировать пространство имен любых пакетов Depends в пространство имен дочерних пакетов.

11
задан Jeroen 13 May 2012 в 07:10
поделиться