Was bedeutet das "." (Punkt) in R?


39

Ich lese gerade das Buch "R in a Nutshell". Und es scheint, als hätte ich den Teil übersprungen, in dem das "." wie in "sample.formula" erklärt wurde.

> sample.formula <- as.formula(y~x1+x2)

Ist sample ein Objekt mit einer Feldformel wie in anderen Sprachen? Und wenn ja, wie kann ich herausfinden, welche anderen Felder / Funktionen dieses Objekt hat? (Typdeklaration)

EDIT: Ich fand gerade eine andere verwirrende Verwendung des ".":

> svm(formula = is_spam~., data = spambase.training)

(der Punkt zwischen ~.,)


Der Punkt, den Sie mit dem is_spam ~ sehen. Befehl bedeutet, dass es keine erklärenden Variablen gibt. In der Regel werden bei Modellformeln y ~ x angezeigt, wenn Sie jedoch keine x-Variable haben, y ~. sagt, man soll den Wert von y erraten, ohne andere Variablen zu verwenden. Dies ist das gleiche wie das Modelly=β0
Christopher Aden

12
@Christopher Im Gegensatz dazu weist die .Formel in R an, alle Variablen im Datenrahmen spambase.training(außer is_spam) als Prädiktoren zu verwenden. Das Modell passt zu . y=β0y ~ 1
Karakal

Ich habe vorher nicht nach Quellen gesucht. Danke für die Verbesserung!
Christopher Aden

@caracal (+1) Wow, ich habe mich nur gefragt, wie das geht. Vielen Dank!
Thomas Levine

Antworten:


30

Der Punkt kann wie im normalen Namen verwendet werden. Es hat jedoch zusätzliche spezielle Interpretation. Angenommen, wir haben ein Objekt mit einer bestimmten Klasse:

 a <- list(b=1)
 class(a) <- "myclass"

Deklarieren Sie nun myfunctionwie folgt als Standard-Generikum:

 myfunction <- function(x,...) UseMethod("myfunction")

Deklarieren Sie nun die Funktion

 myfunction.myclass <- function(x,...) x$b+1

Dann hat der Punkt eine besondere Bedeutung. Für alle Objekte mit Klasse myclassBerufung

 myfunction(a)

wird tatsächlich die Funktion aufrufen myfunction.myclass:

 > myfunction(a)
  [1] 2

Dies wird häufig in R verwendet, das am besten geeignete Beispiel ist die Funktion summary. Jede Klasse hat ihre eigene summaryFunktion. Wenn Sie also beispielsweise ein Modell anpassen (das normalerweise ein Objekt mit einer bestimmten Klasse zurückgibt), müssen Sie dies aufrufen summaryund die entsprechende Zusammenfassungsfunktion für dieses bestimmte Modell aufrufen.


Ich bin sehr überrascht, dass diese Antwort so akzeptiert und positiv bewertet wurde, weil sie die Frage überhaupt nicht beantwortet! Es bezieht sich auf die Ellipse ... (die ein einzelnes Lexem ist, nicht eine Folge von drei verschiedenen) als "Punkt", während die Frage eindeutig einen Punkt bedeutet, .wie er in Formeln und Namen auf eine völlig andere Art und Weise verwendet wird, wie es in einem Zeitgenossen richtig beschrieben wird antworte per Chase.
whuber

3
Naja ich beziehe mich nicht auf die Auslassungspunkte. Ich habe versucht zu erklären, dass der Punkt für den Versand mit der S3-Methode verwendet wird. Die generischen Funktionen haben normalerweise Ellipsen, deshalb habe ich sie verwendet. Wenn sie aus dem Code entfernt werden, ändert sich die Antwort nicht. Ich kann nur vermuten, dass ich die Antwort vor der Bearbeitung gegeben habe, da ich jetzt nach dem erneuten Lesen des Fragenkörpers eine andere Antwort geben würde.
mpiktas

1
Vielen Dank für die Erklärung. Ich denke, das Erscheinen von "..." hat mich zweimal in die Irre geführt, zu glauben, dass Sie es als "Punkt" bezeichnen.
whuber

12

Schauen Sie auf der Hilfeseite nach ?formulain Bezug auf .Hier sind die relevanten Bits:

Es gibt zwei spezielle Interpretationen von. in einer Formel. Die übliche steht im Zusammenhang mit einem Datenargument von Modellanpassungsfunktionen und bedeutet "alle Spalten, die nicht anders in der Formel enthalten sind": siehe terms.formula. Nur im Kontext von update.formula bedeutet dies "was vorher in diesem Teil der Formel war".

Alternativ können die reshapeund reshape2verwenden , um Pakete .und ...ein bisschen anders (aus ?cast):

Es gibt einige spezielle Variablen: "..." steht für alle anderen Variablen, die in der Formel nicht verwendet werden, und "." repräsentiert keine Variable


5

Es gibt einige Ausnahmen (S3-Versandmethode), aber im Allgemeinen wird es nur als Lesbarkeitshilfe verwendet und hat als solche keine besondere Bedeutung.


2
Ich würde das Gegenteil sagen - es hat eine besondere Bedeutung (der von Ihnen erwähnte S3-Versand), aber einige alte Namenskonventionen haben dazu geführt, dass Funktionsnamen, die keine S3-Generika sind, Namen mit a haben .. Das betrifft Namen von Funktionen. Bezüglich der Namen von (nicht funktionsfähigen) Objekten gibt es dann ja keine spezielle Bedeutung.
Setzen Sie Monica - G. Simpson

Am Anfang eines Namens .macht a das Objekt jedoch unsichtbar ls().
Karakal

2

Der Punkt in sample.formula trennt die Probe nur optisch von der Formel . Es ist nur ein Variablenname. R-Variablennamen können mit einer Ausnahme aus alphanumerischen Zeichen sowie Punkt (.) Und Unterstrich (_) bestehen. Hier ist die eigentliche Regel:

" Ein syntaktisch gültiger Name besteht aus Buchstaben, Zahlen und dem Punkt oder der Unterstreichung und beginnt mit einem Buchstaben oder dem Punkt, auf den keine Zahl folgt. Namen wie" .2way "sind ungültig und die reservierten Wörter auch nicht. "

Der zweite Fall (dh der Fall von is_spam ~. ) Ist anders und wird oben erläutert.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.