Pregunta

Entiendo que en R tienes algunos tipos de datos base (vector, matrix, list, data.frame) y luego en los paquetes R tienes algunos tipos avanzados llamados clase S3 o clase S4 (ppp,owin, spatialPointsDataFrame y muchos otros.Algunas de las funciones de los paquetes de R solo funcionan con argumentos de tipo especial.

Necesito una explicación sobre la conversión entre diferentes clases y tipos de datos en R:

A veces puedo usar un código como:

m = c(1, 2, 3, 4)
df = as.data.frame(m)

Pero en otros casos debo usar un código como:

shp = readShapeSpatial("polygons.shp")
win = as(shp,"owin")

¿Cómo sé qué sintaxis del as ¿Usar para qué objeto?O es la sintaxis: as.foo(originalObject) siempre equivalente a as(originalObject, "foo") (aquí foo representa la clase a la que quiero convertir mi objeto para poder usarlo en una función que requiere que su argumento sea un foo clase)

Digamos que uso un paquete en R con una clase foo.y tengo una variable v eso pertenece a la clase bar (en otras palabras, class(v) es bar).¿Cómo sé si la función as(v,"foo") ¿trabajará?

¿Fue útil?

Solución

as.data.frame es un método S3 que puedes comprobar foo usando :

getS3method('as.data.frame','foo')

Pero creo que estás buscando (como se comenta)

showMethods(coerce)

Esto le dará una lista de funciones de coerción predefinidas.

Para definir su función de coerción, una opción (hay muchas opciones como setIS , coerce<- y coerción implícita a través de la herencia) es utilizar setAs.Aquí un ejemplo:

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")

Ahora si compruebo usando:

showMethods(coerce)

Obtienes una entrada con:

from="track", to="numeric"

Para una mejor explicación deberías leer ayuda("como") pero el tema no es muy sencillo.

EDITAR Para mostrar solo las entradas con track puedes hacer esto por ejemplo:

cat(grep('track',showMethods(coerce,printTo=FALSE),value=TRUE))
from="track", to="numeric"
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top