Question

Je comprends que dans R vous avez des types de données de base (vector, matrix, list, data.frame), puis dans les packages R, vous avez des types avancés appelés classe S3 ou classe S4 (ppp,owin, spatialPointsDataFrame et plein d'autres.Certaines fonctions des packages R ne fonctionnent qu'avec des arguments de type spécial.

J'ai besoin d'explications sur la conversion entre différentes classes et types de données dans R :

Parfois, je peux utiliser un code comme :

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

Mais dans d'autres cas je dois utiliser un code comme :

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

Comment puis-je savoir quelle syntaxe du as utiliser pour quel objet ?Ou la syntaxe est-elle : as.foo(originalObject) toujours équivalent à as(originalObject, "foo") (ici foo représente la classe vers laquelle je veux convertir mon objet afin que je puisse l'utiliser dans une fonction qui nécessite que son argument soit un foo classe)

Disons que j'utilise un package en R avec une classe foo.Et j'ai une variable v qui appartient à la classe bar (autrement dit, class(v) est bar).Comment savoir si la fonction as(v,"foo") marchera?

Était-ce utile?

La solution

as.data.frame est une méthode S3 que vous pouvez vérifier foo en utilisant :

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

Mais je pense que vous cherchez (comme c'est commenté)

showMethods(coerce)

Cela vous donnera une liste de fonctions de coercition prédéfinies.

Pour définir votre fonction de contrainte, une option (il existe de nombreuses options comme setIS , coerce<- et coercition implicite par l'héritage) consiste à utiliser setAs.Voici un exemple :

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

Maintenant, si je vérifie en utilisant :

showMethods(coerce)

Vous obtenez une entrée avec :

from="track", to="numeric"

Pour une meilleure explication, vous devriez lire aide("comme") mais le sujet n'est pas très simple.

MODIFIER Pour afficher uniquement les entrées avec trace vous pouvez faire ceci par exemple :

cat(grep('track',showMethods(coerce,printTo=FALSE),value=TRUE))
from="track", to="numeric"
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top