2016-03-29 16 views
7

Sto sviluppando un pacchetto R che deve utilizzare la parallelizzazione come reso disponibile dal pacchetto snowfall. snowfall non sembra importare lo stesso come altri pacchetti come ggplot2, data.table, ecc. Ho incluso snowfall, rlecuyer e snow nel file di descrizione, nome file di spazio e come argomento di importazione nella funzione stessa. Quando provo ad accedere a questa funzione, ottengo il seguente errore:Importazione delle precipitazioni nevose nel pacchetto personalizzato R

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

La funzione sfInit sembra avere un argomento nostart/nostop che si dice è legato all'utilizzo di nidificato sfInit, ma che non sembra fare il trucco anche per me.

Il codice vero e proprio utilizza un sfInit (che è dove ottengo l'errore), alcuni sfExport s e sfLibrary s, e un sfLapply.

Soluzione possibile: Sembra funzionare se si sposta snow dalla sezione di importazione nella sezione delle dipendenze nel file di descrizione. Non so perché però.

+3

Configurazione del sistema, versioni, codice effettivo per eseguire tali operazioni? Sembra pkg: la neve non viene attaccata correttamente. –

+1

Ho neve nel file di descrizione e posso vedere un'importazione (neve) nello spazio dei nomi. Ho anche aggiunto un # "@import snow alla funzione. C'è qualcos'altro che dovrei fare? – TheComeOnMan

+1

Se richiama esplicitamente la neve nel codice wrapper stesso, il pacchetto funziona correttamente. – TheComeOnMan

risposta

2

setDefaultClusterOptions è una funzione del pacchetto snow. Devi importarlo anche tu.

+1

Ho neve nel file di descrizione e posso vedere un'importazione (neve) nel namespace.Ho anche aggiunto un # "@import snow alla funzione. C'è qualcos'altro che dovrei fare? – TheComeOnMan

+1

Se richiama esplicitamente la neve nel codice wrapper stesso, il pacchetto funziona correttamente. – TheComeOnMan

+3

Importerei solo le funzioni necessarie per un pacchetto anziché importare l'intero pacchetto. Usa ''# @importFrom snowDefaultClusterOptions' se usi roxygen2 – Thierry

3

Quando si include un pacchetto in "Depends" quando si allega il pacchetto, si allega anche il pacchetto su cui il pacchetto dipende dal loro spazio dei nomi.

Questa e altre differenze tra dipendenze e importazioni sono spiegate bene in questo sito su other questions.

Se si guarda la descrizione di {snowfall} vedrai che dipende dallo {snow}. È plausibile che gli autori di nevicate sappiano qualcosa che noi non sappiamo e che {snow} deve essere collegato al percorso di ricerca globale per funzionare. In realtà questo è l'avvertimento superiore nella risposta superiore alla domanda ho linkato sopra ...

... 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.

Quindi, nel tuo caso, si dà il caso che tutti {snowfall} vuole è {snow} e ti è capitato di fornirle. Tuttavia, sembra che il comportamento più corretto possa dipendere direttamente da {snowfall}.

Problemi correlati