Die überprüfung, ob das Datum leer ist in R?
Einfach, aber ich bin sicher, dass jemand weiß, wie dies zu tun...
In R, ich war auf der Suche nach so etwas wie ist.leere Fehler Falle, in meiner Funktion, wo ein Benutzer können ein Datum angeben oder es kann leer sein, und wir werden Sie standardmäßig verwenden der Heutigen Datum (d.h. Sys.Date()
)
Versuchte ich
date.end <- ""
# then in function
if (date.end == "" || is.null(date.end)) {
message("end date not specified and so setting to today")
date.end <- Sys.Date()
} else {
# use the date.end passed in as Date class
}
Aber diese Prüfung freaks charToDate(), d.h.
test.end == ""
Error in charToDate(x) :
character string is not in a standard unambiguous format
Bitte beraten wie wird man check für leere Daten in Basis-f?
(Und alle andere Weisheit für die Fehlerbehebung Termine...)
Hinzufügen, um zu klären:
-
Meisten Zeiten, die die Funktion erhalten gute Daten, z.B.
date.end <- as.Date("31/03/2015", "%d/%m/%Y")
So will ich nicht zu ändern, Klasse.
-
Jedoch, wie gehen Sie mit den sonderbaren Fall, wo Sie wollen, um Standard zu heute wenn der Benutzer nicht geben Sie ein Datum an?
nchar(test.end)==0
im testnzchar
wäre Analog zu Ihre Anfrage für is.blank
aber wie @Tim Biegeleisen erwähnt, würde ich konvertieren den Vektor der Termine und der test für NA; dieses würde Ihnen sagen, nicht nur die leer sind, aber denen Folgen Sie nicht Ihrem angegebenen formatDanke @csgillespie. Ich war besorgt, dass nchar(NULL) == 0 ist, gibt Länge Probleme
InformationsquelleAutor micstr | 2015-04-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sich bewusst sein, dass
Sys.Date()
gibt ein Objekt derDate
Klasse. Sehenclass(Sys.Date())
. Daher der==
Vergleich nicht sinnvoll, da Sie den Vergleich zwischen einercharacter
mit einemDate
.Einen Weg, um Ihr problem zu lösen ist die Umwandlung von
Date
zu einemcharacter
:Beachten Sie, dass
date.end
ist jetzt eincharacter
.Bitte siehe die Diskussion in in diesem post.
EDIT: Komplette überholung. OK, aus der Lektüre Ihrer follow-up-Kommentare und Fragen es scheint, dass Sie etwas wie die folgenden (es ist zwar noch nicht ganz klar).
Ich denke, du machst das komplizierter als es ist. Zuerst erstellen wir eine Funktion, kann mit einem single (i)
Date
, (ii) einem vielleicht schlecht formatiertcharacter
oder (iii) dieNULL
Objekt.Nun, machen wir eine-Funktion, die gilt
dateHandler
auf eine Liste der Termine:Die Funktion
handleListOfDates
auch richtig verarbeitetvector
statt einerlist
Termine.Hoffe, das ist, was Sie wollen.
PS ich denke, du meintest "Beachten Sie, dass..." nicht
Ja. Das ist, was ich tun würde. Zwingt Termine mit z.B. mit
as.Date
ergeben würdeNA
s. Würden Sie dann etwas tun, wie Tim vorschlägt.Es scheint.null funktioniert nicht auf einem Vektor. z.B. mylist <- Liste(Datum.Ende.leer, Datum.Ende.null, Datum.Ende.ok), ist.null(mylist) gibt nur TRUE, nicht FALSE TRUE FALSE, wenn ich wollte, es zu benutzen für die Indizierung
Zuerst
is.null
testet, ob das angegebene Objekt ist dieNULL
Objekt.is.null(list(Sys.Date(), NULL, ""))
zurückFALSE
(und nichtTRUE
), wie erwartet, denn dies ist einlist
was offensichtlich nicht derNULL
Objekt. Es funktioniert nicht auf jedem element derlist
. Auch einvector
ist nicht das gleiche wie einlist
.InformationsquelleAutor Anders Ellern Bilgrau
Verwenden
NA
für die fehlenden Daten, und dann ersetzen Sie dieseNA
s mit dem default-Wert:InformationsquelleAutor Tim Biegeleisen
Habe ich versucht, Elemente, die der Leute, die Antworten. Wie @tim-biegeleisen na Idee, wie ein index. Und die Eingabe von @aebilgrau und @csgillepsie.
NULL
nur verursacht Probleme:is.null
gibt man TRUE/FALSE so können Sie nicht verwenden Sie es als ein index, wieis.na
und so bekommt dieser Irrfahrt!
Diese ein bisschen arbeiten für die Listen-und single-Werte. Indizierung ok.
Aber nicht halten die Als.Datum geben! d.h. Rückkehr
Ich glaube, ich könnte nur meine Augen schließen, als eine Art NULL-Wert in r
Ich nicht, dass dies in meiner ursprünglichen Antwort, wie aussah, zu viel detail.
InformationsquelleAutor micstr
"Ende.Datum" <- "" und dann testen Sie "Datum.Ende" aber es funktioniert nicht. Beachten Sie, wie "Ende" und "Datum" werden umgedreht in der Zuordnung und Prüfung.
Ansonsten
end.date == ""
funktionieren sollte, oder Sie können den test für die Anzahl von Zeichen in der Zeichenfolgenchar(end.date)
, die null in Ihrem Fall.InformationsquelleAutor untitled
Können Sie etwas ähnlich wie diese:
InformationsquelleAutor Randall Suárez