2016-08-04 24 views
1

Wie im Titel gesagt: Warum gibt es keine solche Funktion? Oder anders: Was ist der Typ der Funktion? Wenn ich ?update schreibe, bekomme ich etwas vom Paket stats, aber es gibt eine lubridate Funktion, wie beschrieben here auf Seite 7. Dort scheint auch eine lubridate:::update.Date Funktion zu sein, aber ich finde keine Erklärungen für diese Funktion.Warum gibt es keine lubridate ::: update Funktion?

Backround: Ich benutze die Funktion in einem Paket und ich habe es nur funktioniert, nachdem ich die Depends: in der Beschreibung-Datei verwendet habe. Am Anfang wollte ich lubridate::update() ...

Antwort

1

Das lubridate-Paket enthält die Methoden lubridate:::update.Date() und lubridate:::update.POSIXt(). Diese Funktionen werden nicht in den Namespace exportiert, aber ich nehme an, dass sie durch Funktionsüberladung aufgerufen werden, wenn update() auf ein POSIX oder Date Objekt angewendet wird, wenn die lubridate-Bibliothek geladen wird.

Die Hilfeseite ?lubridate:::update.POSIXt bietet einige Informationen über die update Funktion innerhalb der lubridate Paket:

Beschreibung

update.Date und update.POSIXt ein Datum mit den angegebenen Elemente aktualisiert zurückzukehren. Nicht angegebene Elemente bleiben unverändert. update.Date und update.POSIXt nicht die angegebenen Werte zum vorhandenen Datum hinzufügen, sie ersetzen sie für die entsprechenden Teile des vorhandenen Datums.

Usage

## S3 Verfahren für die Klasse 'POSIXt'

Update (Objekt, ..., einfach = FALSE)

Der Nutzungsabschnitt und die Beispiele in dem Hilfeseite zeigt an, dass diese Funktionen nicht einzeln adressiert werden müssen, da sie einfach update() aufgerufen werden, wenn die Bibliothek lubridate geladen ist.

Um diese Funktionen zu überprüfen, kann man z. B. lubridate:::update.POSIXt in die Konsole eingeben (ohne Argumente zu übergeben und ohne die Klammern).

+0

Also einschließlich lubridate via Beschreibung Datei und 'hängt 'in meinem Paket ist in Ordnung? Danach kann ich 'update (...)' benutzen und so sollte man die Funktion benutzen? Warum bekomme ich immer die Referenz "stats :: update" und nichts von base? – Christoph

+0

Ich habe keine Erfahrung in der Entwicklung von R-Paketen, daher weiß ich nicht, ob die Aufnahme in die Datei DESCRIPTION ausreichend ist. Wenn Sie diese Funktionen gezielt aufrufen wollen, können sie mit 'lubridate ::: update.POSIXt()' angesprochen werden. Das 'stats'-Paket ist Teil der Standardverteilung in R, daher wird es allgemein als" Basis "-Bibliothek bezeichnet, obwohl es eine separate Kernbibliothek mit dem Namen" base "gibt. Es ist selbstverständlich, dass 'stats :: update()' verfügbar ist. Wenn lubridate, wie es scheint, Funktionsüberladung/Ad-hoc-Polymorphismus ausnutzt, sollte 'stats :: update()' nach Bibliothek (lubridate) ausreichen – RHertel

0

Sie müssen verwenden, um die lubridate Paket laden:

library(lubridate) 
date <- now() 
print(date) 
new_date <- update(date, year = 2010, month = 1, day = 1) 
print(new_date) 

Ausgänge:

"2016.08.04 08.58.08 CEST"

"2010-01-01 08:58:08 CET"

+0

Aber welche Art von Funktion ist das? Warum gibt es keine 'lubridate ::: update' Funktion? Ich werde die Frage genauer machen ... – Christoph

+1

Suche nach "Funktionsüberladung" und recherchiere das S3 OO Klasse System in R. Wie viele Funktionen (zB 'seq') sind die Details des Codes spezifisch für den Modus des ersten Arguments ist obskuriert. Sie müssen 'seq.Date' nicht für eine Folge von Daten ausführen, oder' seq.default' für Zahlen 'seq' versteht die Eingabe und führt den passenden Code für Sie aus. – NJBurgo