2016-04-12 17 views
1

In einigen Tutorial Code, es steht geschrieben:Initialisierungsvektor mit <0

## Results vector 
results <- numeric() 

## Initialize start and end indices 
start <- end <- 0 

for(index in seq_along(vectors)) { 
    values <- vectors[[index]] 
    size <- length(values) 

    if(size > 0) { 
    start <- end + 1 
    end <- start + size - 1 
    results[start:end] <- values 
    } 
} 

Warum ist das notwendig? Warum konnte der Coder nicht starten? < - Ende < - numeric()?

Antwort

4

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 startnumeric(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 
+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

+0

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. –

+0

Wenn dies Ihre Frage beantwortet, sollten Sie das Häkchen ankreuzen, um es zu akzeptieren ... –

Verwandte Themen