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.
+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 ... –
@Jeroen, czy mógłbyś podać przykład? Kiedy próbuję 'library (xts)', funkcje eksportu 'zoo' są ładowane automatycznie. – kohske
@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