2016-03-29 13 views
7

Pracuję nad pakietem R, który musi korzystać z równoległości udostępnianej przez pakiet snowfall. snowfall nie importuje tego samego, co inne pakiety, takie jak ggplot2, data.table itd. Zawarłem snowfall, rlecuyer i snow w pliku opisu, pliku przestrzeni nazw oraz jako argument importu w samej funkcji. Kiedy próbuję uzyskać dostęp do tej funkcji, pojawia się następujący błąd:Importowanie opadów śniegu do niestandardowego pakietu R

Error in sfInit() : could not find function "setDefaultClusterOptions"

Funkcja sfInit wydaje się mieć nostart/nostop argument, który mówi, że jest związany z zagnieżdżonego wykorzystania sfInit ale które nie wydają dla mnie też.

Sam kod rzeczywisty wykorzystuje sfInit (czyli tam, gdzie pojawia się błąd), kilka sfExport s i sfLibrary S i jest sfLapply.

Możliwe rozwiązanie: Wydaje się działać, jeśli przeniesię snow z sekcji importowania do sekcji zależnej w pliku opisu. Nie wiem dlaczego.

+3

Konfiguracja systemu, wersje, rzeczywisty kod do wykonania tych operacji? Wygląda na to, że pkg: śnieg nie jest prawidłowo zamocowany. –

+1

Mam śnieg w pliku opisu i widzę import (śnieg) w przestrzeni nazw. Dodałem również funkcję # '@import snow do tej funkcji. Czy jest coś jeszcze, co powinienem robić? – TheComeOnMan

+1

Jeśli jawnie nazywam śnieg w samym kodzie opakowania, pakiet działa poprawnie. – TheComeOnMan

Odpowiedz

2

setDefaultClusterOptions jest funkcją z pakietu . Musisz to zaimportować.

+1

Mam śniegu w pliku opisu i widzę import (śnieg) w przestrzeni nazw.Dodałem również funkcję # '@import snow do tej funkcji. Czy jest coś jeszcze, co powinienem robić? – TheComeOnMan

+1

Jeśli jawnie nazywam śnieg w samym kodzie opakowania, pakiet działa poprawnie. – TheComeOnMan

+3

Chciałbym zaimportować tylko te funkcje, które są potrzebne do pakietu, zamiast importować cały pakiet. Użyj '' # @importFrom snow setDefaultClusterOptions', jeśli używasz roxygen2 – Thierry

3

Po dołączeniu pakietu w opcji "Zależy", gdy dołącza się pakiet, dołączają również pakiet, w którym pakiet zależy od ich przestrzeni nazw.

Ta i inne różnice między Dependami i Importami są dobrze wyjaśnione na tej stronie w other questions.

Jeśli spojrzysz na OPIS {snowfall} zobaczysz, że to zależy od {snow}. Jest prawdopodobne, że autorzy opadów śniegu wiedzą o czymś, czego nie robimy i że do pracy musi być dołączona globalna ścieżka wyszukiwania. W rzeczywistości, która jest top zastrzeżenie w górę odpowiedź na pytanie I połączone powyżej ...

... if your package relies on a package A which itself "Depends" on another package B, your package will likely need to attach A with a "Depends directive.

This is because the functions in package A were written with the expectation that package B and its functions would be attached to the search() path.

Więc w twoim przypadku, to właśnie tak się dzieje, że wszystko jest {snow}{snowfall} chce a ty się do jej świadczenia. Wygląda jednak na to, że bardziej prawidłowe zachowanie może zależeć od tego, czy chcesz bezpośrednio polegać na {snowfall}.

Powiązane problemy