2013-03-22 14 views
6

Sto tentando di importare un metodo S3, predict da un altro pacchetto pls. Ho una funzione che utilizza questi valori previsti. Il problema è che, quando si compila il pacchetto:Importazione del metodo S3 da un altro pacchetto

Error : object 'predict' is not exported by 'namespace:pls' 

Ho messo insieme this Gist come un esempio minimo che mette in evidenza il mio problema e contiene il seguente file R:

#' Test function 
#' 
#' @importFrom pls predict 
#' 
#' @export 

myfunc <- function(x){ 
    stopifnot(class(x) == "mvr") 
    predict(x)*2 
} 

risposta

7

Il problema principale qui è la pls non definisce una funzione/metodo predict. Fornisce diversi metodi per il generico predict, ma non per il generico stesso.

È necessario importare il generic dal pacchetto stats, se necessario, non sono sicuro che lo si faccia perché non si sta creando una funzione che necessita o si basa sul generico. Come minimo avrete bisogno

#' @importFrom stats predict 

anche se potrebbe essere necessario/voler importare l'intero statistiche namespace - dipende che cosa il vostro pacchetto fa al di là della funzione di vostro stanno attualmente lavorando.

L'altra questione è che predict.mvr è non esportati dalla pls namespace

> require(pls) 
Loading required package: pls 

Attaching package: ‘pls’ 

The following object(s) are masked from ‘package:stats’: 

    loadings 

> predict.mvr 
Error: object 'predict.mvr' not found 
> pls::predict.mvr 
Error: 'predict.mvr' is not an exported object from 'namespace:pls' 
> pls:::predict.mvr 
function (object, newdata, ncomp = 1:object$ncomp, comps, type = c("response", 
    "scores"), na.action = na.pass, ...) 

Come tale non si può semplicemente importarlo. Quindi il pacchetto deve avere Depends: pls nello DESCRIPTION per trovare il metodo corretto predict.

+1

Oppure invece di inserire 'pls' in Descrizione DEPENDS, basta usare' pls ::: predict.mvr' direttamente (e assicurarsi che 'pls' sia almeno in Description IMPORTS per garantire la sua installazione). – Gregor

+0

Non va bene usare 'pls ::: predict.mvr' direttamente, i tripli-due sono un segno che stai curiosando dove l'autore non ha intenzione di farlo. –

Problemi correlati