tl; drnumeric()
ist nicht dasselbe wie 0
, es erzeugt einen numerischen Vektor mit Länge Null. Warum nicht versuchen und sehen, was bricht?
numeric()
entspricht numeric(0)
, die eine Länge Null (leer) numerisches Vektor TRUE
, während numeric(1)
erzeugen würde ein längen 1 numerischen Vektor mit Nullen gefüllt, dh
identical(numeric(1),0)
ist produziert . Meiner Meinung nach ist x <- 0
(viel!) Klarer als x <- numeric(1)
.
Was, warum start
und end
Bedarf auf Null initialisiert werden:
start
nicht wirklich Bedarf an allen
- initialisiert werden, wenn
end
zu numeric()
initialisiert wird eher als 0 ist, was passiert, wenn wir zuerst seinen Wert verwenden müssen? Das erste Mal size>0
wir
start <- end + 1
ausführen Wenn end
ist numeric(0)
dann ist start
numeric(0)
auch ich kann nicht genau erklären, warum das Ergebnis dieser Operation auf diese Weise definiert ist, sondern von ?Arithmetic
:
Die binären Operatoren geben Vektoren zurück, die das Ergebnis der elementweisen Operationen enthalten. Wenn ein Vektor mit der Länge Null verwendet wird, hat das Ergebnis die Länge Null.
Dann
end <- start + size - 1
wird auch dazu führen, numeric(0)
und
results[start:end]
wird
Error in start:end : argument of length 0
Dank geben Ben. Ich habe mehr von dem Code oben im ursprünglichen Beitrag hinzugefügt. Jetzt verstehe ich, dass x <-0 ist klarer Code und das Äquivalent von x <-numerisch (1). Aber ich verstehe immer noch nicht, warum es gebraucht wird? Warum nicht einfach x <- numerisch()? – Haim
weil (wie ich in meiner Antwort gesagt habe) (1) der unspezifizierte Algorithmus, den Sie einrichten, anscheinend * erfordert, dass "start" und "end" auf Null initialisiert werden; (2) "start <- end <- numeric()" tut etwas anderes, d. H. Es setzt diese Variablen auf einen numerischen Vektor mit Länge Null. –
Wenn dies Ihre Frage beantwortet, sollten Sie das Häkchen ankreuzen, um es zu akzeptieren ... –