Ho una classe contenitore che è fondamentalmente una lista. Poiché volevo supportare il subsetting, ho sovraccaricato il sottoinsieme [
operator (probabilmente implementato male).Il sovraccarico dell'operatore smette di funzionare nel pacchetto R
#' Constructor for spectra object
.spectra = function(n_spectrum = 0) {
object = vector(mode = "list", n_spectrum)
class(object) = "spectra"
return(object)
}
#' Operator overload
#' @export
`[.spectra` = function(x, i) {
x = unclass(x)
x = x[i] # Using the list's subset function
class(x) = "spectra"
return(x) # Should return a "spectra" object, not a list
}
Ora, questo funziona come previsto quando nel mio ambiente di sviluppo (quando eseguo il debug del pacchetto). Cioè, se y_old
è un oggetto spectra
e io faccio y_new = y_old[-1]
, y_new
è ancora un oggetto spectra
.
Tuttavia, quando compilo il progetto come un pacchetto e installarlo, l'operatore subsetting restituisce un list
invece di un oggetto spectra
.
Qualsiasi indizio di cosa sta succedendo?
EDIT
ho dimenticato di dire che sto usando RStudio e la biblioteca devtools
.
Avete una riga con 'S3method (" [", spectra)' nel file 'NAMESPACE' del pacchetto? – nicola
@nicola No. La ** sola ** linea che ho in 'NAMESPACE' è' exportPattern ("^ [[: alpha:]] +") ', che immagino sia ciò che RStudio inserisce lì. – dudu
Metti questa linea, ricostruisci il pacchetto e verifica se funziona. – nicola