Mechanizm przestrzeni nazw R umożliwia dostęp do funkcji export
, które następnie są widoczne dla użytkownika. Ponadto pozwala na funkcje import
z innych pakietów. Podczas gdy korzyść z eksportu jest oczywista, mam większe problemy ze zrozumieniem korzyści z importu.Jakie są zalety importu w przestrzeni nazw w R?
Jedna z korzyści polega na tym, że można używać funkcji z innych pakietów bez dołączania pakietu, a tym samym do oszczędzania pamięci. Jest to zilustrowane w sekcji 1.6.4 in the writing R extensions manual.
Jednak muszą istnieć inne korzyści z funkcji importu. Zwłaszcza, section 1.6.6 (that deals with S4 classes) pokazano ten namespace
pakietu stats4:
export(mle)
importFrom("graphics", plot)
importFrom("stats", optim, qchisq)
## For these, we define methods or (AIC, BIC, nobs) an implicit generic:
importFrom("stats", AIC, BIC, coef, confint, logLik, nobs, profile,
update, vcov)
exportClasses(mle, profile.mle, summary.mle)
## All methods for imported generics:
exportMethods(coef, confint, logLik, plot, profile, summary, show, update, vcov)
## implicit generics which do not have any methods here
export(AIC, BIC, nobs)
Tutaj istnieją funkcje importowane, które nie są ani klasy ani rodzajowych S4 (gdzie byłoby sensu używać importu, jak również, co zostało udokumentowane w przykładzie w that section) , ale działa jak plot
z pakietu graphics
, które są automatycznie ładowane po uruchomieniu R.
Dlatego moje pytanie brzmi: jaka jest korzyść z importowania funkcji takich jak plot
, optim
lub qchisq
?
Oznacza to, że importowanie takiej funkcji ma sens tylko wtedy, gdy chce się ją promować na poziomie ogólnym? (Jeśli chcemy założyć, że nie ma innych funkcji w ścieżce wyszukiwania o nazwie 'plot') – Henrik
Zawsze ma sens zaimportowanie funkcji (z pakietu innego niż baza, która jest zawsze dostępna) używanego przez pakiet, w przeciwnym razie, gdy jakiś trzeci pakiet definiuje funkcję 'plot = function (...)" Mam dobrą historię do opowiedzenia "' twój kod pęka.Nie masz kontroli nad ścieżką wyszukiwania, użytkownik tak robi. –
Jeśli jednak zawsze wywołuję funkcję za pomocą operatora '::' (np. Zawsze 'graphics :: plot()' zamiast 'plot()') czy nadal istnieje korzyść z importu, jeśli pakiet jest już załączony? – Henrik