2012-05-11 12 views
10

Zawsze zakładałem, że posiadanie pakietu w polu "Zależnie" automatycznie spowoduje także zaimportowanie przestrzeni nazw. Wydaje się jednak, że w wersji 2.15 zależności nie stają się dostępne, dopóki pakiet nie jest w rzeczywistości dołączony do ścieżki wyszukiwania. Czy to zamierzone zachowanie?Problemy z zależnością pakietów R, gdy przestrzeń nazw nie jest dołączona.

Problem wygląda następująco: Załóżmy, że jest to pakiet „dziecko”, które Zależy, ale nie wyraźnie importu pakiet o nazwie „nadrzędna” i zawiera funkcję, która woła do obiektu w przestrzeni nazw 'Rodzic'. Następnie, gdy ta funkcja zostanie wywołana bez faktycznego dołączania "Child", funkcja w "Parent" nie może zostać znaleziona.

Oto przykład z podręcznika pakietu bigdata, ale problemem jest to bardzo powszechne:

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) 

Przykład powiodło się, ponieważ lasso.stars zależy „glmnet”, który nie jest załadowany aż bigdata załączeniu. Jedynym sposobem, aby móc wywołać lasso.stars jest rzeczywiście dołączyć pakiet bigdata:

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

Teraz dodatkowo komplikować, wydaje się, że problem ten jest dziedziczony do dowolnego pakietu „wnuczka”, który Import w tym przypadku funkcja lasso.stars. Trudno jest znaleźć dobry przykład, ale jestem pewien, że tam są.

Czy to błąd? Wiem, że można tego uniknąć, prosząc autorów paczek o używanie Importów zamiast Zależnych, ale w praktyce większość pakietów w CRAN nadal używa Depends. Wydaje się, że problemu można łatwo uniknąć, jeśli R automatycznie zaimportuje przestrzeń nazw wszystkich pakietów Depends do przestrzeni nazw pakietu podrzędnego.

+0

+1 wielkie pytanie. To jedna z tych, które pomyślałem o porwaniu, ale odstraszam, myśląc, że może być lepiej wychowana na R-devel (ponieważ myślę, że członkowie R-core są jedynymi ludźmi, którzy mogą rozwiązać ten problem). Musieli to przedyskutować, ale kilkakrotnie wyszukiwałem szybko i nie widziałem żadnej wzmianki o tym, co wydaje się dziwne ... –

+0

@Jeroen, czy mógłbyś podać przykład? Kiedy próbuję 'library (xts)', funkcje eksportu 'zoo' są ładowane automatycznie. – kohske

+0

@kohske przykład znajduje się w temacie. Pakiet 'xts' zawiera plik NAMESPACE, w którym ręcznie importuje wymagane funkcje z' zoo'. Dlatego nie ma problemu, który myślę. – Jeroen

Odpowiedz

2

Dla tych, którzy są zainteresowani, dyskusja trwa here na liście mailingowej R-devel:

Powiązane problemy