Ein Punkt im Funktionsnamen kann Folgendes bedeuten:
- gar nichts
- ein Trennzeichen zwischen Methode und Klasse in S3-Methoden
- um den Funktionsnamen auszublenden
Mögliche Bedeutungen
1. Gar nichts
Der Punkt in data.frame
trennt nicht data
aus frame
, die nicht visuell.
2. Trennung von Methoden und Klassen in S3-Methoden
plot
ist ein Beispiel für eine generische S3-Methode. Somit sind plot.lm
und plot.glm
sind die zugrunde liegenden Funktionsdefinitionen, die beim Aufrufen von plot(lm(...))
oder verwendet werdenplot(glm(...))
3. Interne Funktionen ausblenden
Beim Schreiben von Paketen ist es manchmal nützlich, führende Punkte in Funktionsnamen zu verwenden, da diese Funktionen der allgemeinen Ansicht etwas verborgen sind. Funktionen, die nur für ein Paket vorgesehen sind, verwenden dies manchmal.
In diesem Zusammenhang bedeutet "etwas versteckt" einfach, dass die Variable (oder Funktion) normalerweise nicht angezeigt wird, wenn Sie ein Objekt mit auflisten ls()
. ls
Verwenden Sie, um das Anzeigen dieser Variablen zu erzwingen ls(all.names=TRUE)
. Indem Sie einen Punkt als Anfangsbuchstaben einer Variablen verwenden, ändern Sie den Bereich der Variablen selbst. Zum Beispiel:
x <- 3
.x <- 4
ls()
[1] "x"
ls(all.names=TRUE)
[1] ".x" "x"
x
[1] 3
.x
[1] 4
4. Andere mögliche Gründe
Bei Hadley plyrPaket verwendet er die Konvention, um führende Punkte in Funktionsnamen zu verwenden. Dies ist ein Mechanismus, um sicherzustellen, dass beim Auflösen von Variablennamen die Werte in Benutzervariablen und nicht in interne Funktionsvariablen aufgelöst werden.
Komplikationen
Dieses Durcheinander verschiedener Verwendungen kann zu sehr verwirrenden Situationen führen, da diese verschiedenen Verwendungen alle unter demselben Funktionsnamen verwechselt werden können.
Zum Beispiel, um a data.frame
in eine von Ihnen verwendete Liste zu konvertierenas.list(..)
as.list(iris)
In diesem Fall as.list
handelt es sich um eine generische S3-Methode, an die Sie eine übergeben data.frame
. Daher heißt die S3-Funktion as.list.data.frame
:
> as.list.data.frame
function (x, ...)
{
x <- unclass(x)
attr(x, "row.names") <- NULL
x
}
<environment: namespace:base>
Und für etwas wirklich Spektakuläres laden Sie das data.table
Paket und sehen Sie sich die Funktion an as.data.table.data.frame
:
> library(data.table)
> methods(as.data.table)
[1] as.data.table.data.frame* as.data.table.data.table* as.data.table.matrix*
Non-visible functions are asterisked
> data.table:::as.data.table.data.frame
function (x, keep.rownames = FALSE)
{
if (keep.rownames)
return(data.table(rn = rownames(x), x, keep.rownames = FALSE))
attr(x, "row.names") = .set_row_names(nrow(x))
class(x) = c("data.table", "data.frame")
x
}
<environment: namespace:data.table>
is.na
,as.data.frame
, ...) ist nicht üblich , in anderen Programmiersprachen, aber ich mag es.