Sono perplesso dall'erroreR utilizzando metodi S3 e S4 di simulare nello stesso pacchetto
found an S4 version of 'simulate' so it has not been imported correctly
Ho scritto un pacchetto R che include una definizione di un metodo di simulazione() come metodo S3. Poiché il generico per la simulazione è già definito, definisco semplicemente una classe simulate.my (simulate.fitContinuous nel mio caso).
Il pacchetto dipende anche da un altro pacchetto che ha una versione S4 di simulazione. Quando carico il mio pacchetto, ottengo l'errore di versione S4 sopra. Non sono sicuro di cosa stia producendo l'errore.
riproducibile esempio afferrando la package from github, o fare
require(devtools)
install_github("pmc", "cboettig")
require(pmc)
Per riprodurre questo errore da zero: Creare un nuovo pacchetto con file di descrizione minima. includere le importazioni DESCRIZIONE: ahi. Crea un NAMESPACE e aggiungi le importazioni (ahi) e S3method (simula, prova). Creare la directory R, aggiungere il uno script R banale (documentazione roxygen ho incluso che genera lo spazio dei nomi che ho appena detto, ma questo errore può anche essere creato senza devtools/roxygen):
#' simulate
#'
#' a test for s3/s4 conflicts
#' @param object who cares?
#' @param nsim guess.
#' @param seed yup
#' @param ... other parameters we will just ignore
#' @return something
#' @method simulate test
#' @S3method simulate test
#' @import ouch
simulate.test <- function(object, nsim = 1, seed = NULL, ...){
message("This test worked")
}
Installa il pacchetto (documento con devtools prima se lo desideri) e ottieni l'errore.
La mia soluzione migliore finora è eliminare la linea S3method dal NAMESPACE ed esportare invece la funzione completa simulate.test. Questo passerà il controllo e l'installazione senza avvisi, ma è chiaramente una soluzione inferiore.
Una soluzione diversa è di avere a che fare tanto quanto le importazioni e documentare correttamente il metodo S3 (come sopra). Quindi tutto funziona come previsto, ma il messaggio di avviso rimane.
Si noti che l'utilizzo dipende invece delle importazioni e il mantenimento della riga S3method (simula, prova) non genera errori, ma non genera nemmeno il comportamento corretto. – cboettig