Ho scritto un pacchetto utilizzando le classi S4 e vorrebbe utilizzare le funzioni rbind, cbind con queste classi definite.modo corretto di utilizzare cbind, rbind con le classi S4 nel pacchetto
Dal momento che non sembra essere possibile definire rbind
e cbind
direttamente come metodi S4 ho definito rbind2
e cbind2
invece:
setMethod("rbind2", signature(x="ClassA", y = "ANY"),
function(x, y) {
# Do stuff ...
})
setMethod("cbind2", signature(x="ClassA", y = "ANY"),
function(x, y) {
# Do stuff ...
})
Da ?cbind2
ho imparato che queste funzioni devono essere attivati utilizzando methods:::bind_activation
per sostituire rbind e cbind dalla base.
ho inserito la chiamata nel file del pacchetto R/zzz.R utilizzando la funzione di .onLoad
:
.onLoad <- function(...) {
# Bind activation of cbind(2) and rbind(2) for S4 classes
methods:::bind_activation(TRUE)
}
Questo funziona come previsto. Tuttavia, l'esecuzione CMD R controllare ora sto ottenendo il seguente nota dal momento che sto utilizzando una funzione da non esportare nei metodi:
* checking dependencies in R code ... NOTE
Unexported object imported by a ':::' call: 'methods:::bind_activation'
See the note in ?`:::` about the use of this operator.
Come posso liberarmi della nota e qual è il modo corretto di definire i metodi cbind e rbind per le classi S4 in un pacchetto?
Ti dispiacerebbe includere le definizioni di classe (ad esempio 'setClass (" ClassA ", ...)') di un paio delle classi S4 per cui stai cercando di aggiungere i metodi 'rbind' e' cbind'? Sarebbe più facile elaborare una soluzione per il tuo problema. – nrussell
Le definizioni di classe non dovrebbero essere importanti in questo caso poiché si tratta solo di selezione/dispacciamento del metodo. Quindi potresti usare qualsiasi definizione come setClass ("ClassA", representation (a = "numerico")). – user625626
Inoltre, potresti spiegare perché "* ... non sembra possibile definire rbind e cbind direttamente come metodi S4 ... *" - magari aggiungere il codice dal tentativo di implementarlo? – nrussell