Frage

Ich verstehe, dass es in R einige Basisdatentypen gibt (vector, matrix, list, data.frame) und dann gibt es in den R-Paketen einige erweiterte Typen namens S3-Klasse oder S4-Klasse (ppp,owin, spatialPointsDataFrame und viele andere.Einige Funktionen in R-Paketen funktionieren nur mit Argumenten eines speziellen Typs.

Ich brauche eine Erklärung zur Konvertierung zwischen verschiedenen Klassen und Datentypen in R:

Manchmal kann ich einen Code wie den folgenden verwenden:

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

Aber in anderen Fällen muss ich einen Code wie den folgenden verwenden:

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

Woher weiß ich, welche Syntax der as für welches Objekt verwenden?Oder lautet die Syntax: as.foo(originalObject) immer gleichbedeutend mit as(originalObject, "foo") (hier steht foo für die Klasse, in die ich mein Objekt konvertieren möchte, damit ich es in einer Funktion verwenden kann, deren Argument ein sein muss foo Klasse)

Nehmen wir an, ich verwende ein Paket in R mit einer Klasse foo.Und ich habe eine Variable v das gehört zur Klasse bar (mit anderen Worten, class(v) Ist bar).Woher weiß ich, ob die Funktion as(v,"foo") wird funktionieren?

War es hilfreich?

Lösung

as.data.frame ist eine S3-Methode, nach der Sie suchen können foo mit:

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

Aber ich denke, Sie suchen (wie es kommentiert wird)

showMethods(coerce)

Dadurch erhalten Sie eine Liste vordefinierter Zwangsfunktionen.

Um Ihre Zwangsfunktion zu definieren, gibt es eine Option (es gibt viele Optionen wie setIS , coerce<- und impliziter Zwang durch Vererbung) ist zu nutzen setAs.Hier ein Beispiel:

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

Wenn ich jetzt überprüfe:

showMethods(coerce)

Sie erhalten einen Eintrag mit:

from="track", to="numeric"

Für eine bessere Erklärung sollten Sie lesen help("as") aber das Thema ist nicht ganz einfach.

BEARBEITEN Um nur die Einträge mit Track anzuzeigen, können Sie beispielsweise Folgendes tun:

cat(grep('track',showMethods(coerce,printTo=FALSE),value=TRUE))
from="track", to="numeric"
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top