2015-05-13 10 views
5

Come evitare "Impossibile trovare la funzione"% dopar% "" in una funzione di un pacchetto quando solo importazioni (non dipende) foreach in DESCRIZIONE di un pacchetto? c'è un modo come foreach ::% dopar% come utilizzo foreach :: foreach in funzione? Grazie.come utilizzare% dopar% quando solo importazione foreach in DESCRIPTION di un pacchetto

Codice come:

In funzione

foreach::foreach(1:9) %dopar% { 

...} 

in Descrizione

Imports: 
    Matrix, 
    parallel, 
    foreach, 
    doParallel 

risposta

3

È necessario utilizzare backticks: foreach::`%dopar%` (o preventivi foreach::"%dopar%" lavorerà anche).

+1

Potrebbe chiarire un po 'di più su come chiamare esplicitamente% Dopar%? Sto cercando di eseguire quanto segue che non funziona. 'foreach :: foreach (i = 1: 9, .combine =" + ") foreach :: \'% dopar% \ '{i}' e ho provato varie combinazioni con i backtick, ma di solito dà un errore "simbolo inatteso". Grazie! –

+0

@KevinZen Non sono sicuro di come riprodurre questo errore e non ricordo di averlo mai ricevuto. Ti capita lo stesso se usi le virgolette? Che ne dici di definire un alias come '\'% dopar% \ '<- foreach :: \'% dopar% \ '' e poi usarlo? – konvas

+0

Sì, se provo a definire questa funzione in modo esplicito senza utilizzare Roxygen2 né i backtick né le virgolette funzionano. Mi sono reso conto che non dovevo preoccuparmi di 'foreach ::% dopar%' quando si utilizza Roxygen2. Ha funzionato bene con il solo 'import (foreach)' –

4

@ Kevin Zen,

ho avuto lo stesso problema, ma penso che ho appena risolto esso utilizzando il campo "importFrom" nel file namespace. Io uso Roxygen2 di documentare, così ho inserito semplicemente il tag:

#' @importFrom foreach %dopar% 

con la funzione foreach viene chiamato in Ha creato un campo nel file namespace come ad esempio:.

importFrom(foreach,"%dopar%") 

quindi se si aren Usando Roxygen2, potresti semplicemente inserire quella linea nel tuo spazio dei nomi e questo dovrebbe fare lo stesso.

Ciò dovrebbe impedire il controllo della gru da lamentarsi. Tuttavia, una volta che si tenta di eseguire il codice su un computer che non dispone già il pacchetto "foreach" caricato e collegato via:

library(foreach) 

si otterrà un messaggio che% Dopar% non viene trovato se "foreach "è elencato in" Imports "anziché" Depends "nel tuo file DESCRIPTION. Quindi assicurati che foreach sia elencato nel campo "Depends".

3

Quanto segue ha funzionato per me. Definire un locale %do% o %dopar% come segue

`%dopar%` <- foreach::`%dopar%` 
`%do%` <- foreach::`%do%` 

Poi si dovrebbe essere in grado di eseguire

foreach::foreach(i = 1:9, .combine = "+") %dopar% {i} 
foreach::foreach(i = 1:9, .combine = "+") %do% {i} 
+0

Questa soluzione funziona per me, e gli altri qui no. Grazie. –