Tipo di dati di classe Coerce in r con come
Domanda
Comprendo che in R hai alcuni tipi di dati di base (vector, matrix, list, data.frame
) e quindi nei pacchetti R ha alcuni tipi avanzati chiamati S3-Classe S3 o S4-classe (ppp
, owin
, spatialPointsDataFrame
e molti altri. Alcune delle funzioni Nei pacchetti R funzionano solo con argomenti di tipo speciale.
Ho bisogno di spiegazione sulla conversione tra classi diverse e tipi di dati in R:
A volte posso usare un codice come:
m = c(1, 2, 3, 4)
df = as.data.frame(m)
.
Ma in altri casi devo usare un codice come:
shp = readShapeSpatial("polygons.shp")
win = as(shp,"owin")
.
Come faccio a sapere quale sintassi del as
da utilizzare per quale oggetto?
O è la sintassi: as.foo(originalObject)
sempre equivalente a as(originalObject, "foo")
(qui Foo sta per la classe che voglio convertire il mio oggetto in modo da poter utilizzare in una funzione che richiede la sua discussione di essere una classe foo
)
Diciamo che uso un pacchetto in r con una classe foo
. E ho un v
variabile che appartiene a Classe bar
(in altre parole, class(v)
è bar
). Come faccio a sapere se la funzione as(v,"foo")
funzionerà?
Soluzione
as.data.frame
è un metodo S3 che è possibile verificare la presenza di foo
utilizzando:
getS3method('as.data.frame','foo')
.
Ma penso che tu stia cercando (come è commentato)
showMethods(coerce)
.
Questo ti darà un elenco di funzioni di cooperazione predefinite.
Per definire la funzione di cancellazione della cancellazione, un'opzione (ci sono molte opzioni come setIS
, coerce<-
e coercizione implicita attraverso l'ereditarietà) è utilizzare setAs
.Ecco un esempio:
track <- setClass("track",
slots = c(x="numeric", y="numeric"))
setAs("track", "numeric", function(from) from@y)
t1 <- new("track", x=1:20, y=(1:20)^2)
as(t1, "numeric")
.
Ora se controllo usando:
showMethods(coerce)
.
Ottieni una voce con:
from="track", to="numeric"
.
Per una migliore spiegazione dovresti leggere Guida ("come") Ma il soggetto non è molto semplice.
Modifica Per mostrare solo le voci con la traccia che puoi farlo ad esempio:
cat(grep('track',showMethods(coerce,printTo=FALSE),value=TRUE))
from="track", to="numeric"
.