2016-05-09 9 views
-5

Ich habe ein Endspiel in Kürze, hier sind einige Beispiele, die der Lehrer geschrieben hat, aber wirklich nicht verstehen kann.R Programmiersprache - Loops

1. for und next

for(i in 1:3) 
    { 
    print("a") 
    next 
    print("b") 
    } 

druckt

[1] "a" 
[1] "a" 
[1] "a" 

2.Nested for

Wie funktioniert die nächste Anweisung Arbeit hier? Es läuft weiter, wenn eine Bedingung gesetzt ist, ich weiß, Beispiel (if i==3) {next}, so ignoriere ich die Erlöse mit i=3, aber wie funktioniert es, wenn es nicht unter einer Bedingung ist? suchte das ganze Netz aber konnte keine Antwort finden

for(i in 1:3){ 
    for(j in 1:3) 
    for(k in j:i) 
     print("*") 
} 

Der obige Code produziert 17 Sterne. Wie ?

3.Another Geheimnis

my.vector <- c(1,5,9,13) 
my.data <- c() 
for(i in my.vector){ 
    if(i <= 5){ 
    my.data <- c(my.data, "small") 
    }else{ 
    my.data <- c(my.data, "huge") 
    } 
    my.data <- c(my.data, i) 
} 

Der Ausgang des Code oben ist "9", "großes", "13"

Im Ernst, wie? Sollte es nicht "klein", "klein", "riesig", "riesig" sein?

+5

die Lehrer sagen, dass sie Sie sollten aufhören, lehren Objekte in einem wachsen Schleife. Es gibt normalerweise bessere Alternativen zu "for" -Schleifen in R, aber wenn Sie sie verwenden, weisen Sie das Rückgabeobjekt vor. Zu 'next': Da der Code immer aufgerufen wird, springt er immer zur nächsten Iteration. Der nachfolgende Code wird immer ignoriert (daher ist dieses Beispiel etwas dumm). Ich weiß nicht einmal, wieso sie dir "nächstes" beibringen. In mehr als fünf Jahren, in denen ich R verwendet habe, habe ich nie "next" verwendet. – Roland

+2

Eine gute Methode, um diese Art von Problemen selbst zu lösen, ist das Einfügen zusätzlicher Druckanweisungen wie 'print (i)', um die Bewegung in den Schleifen zu verfolgen. – lmo

Antwort

1

Für die ersten, die Ansicht, dass:

for(i in 1:3) 
{ 
    print("a") 
    if(TRUE){next} 
    print("b") 
} 

im Wesentlichen gleichwertig ist. Sein Sprichwort "Nun, das wird sowieso immer wahr sein". Dann sollte es mit Ihrem Verständnis helfen, warum es "b" nicht druckt.

Für die zweite ... schreiben Sie jeden Schritt. Nur durch eine Reihe von Drucken (i), Drucken (j) und es sollte Sinn machen, warum.

for(i in 1:3) { 
    for (j in 1:3) { 
    for (k in j:i) { 
     #print("*") 
     print(i) 
     print(j) 
     print(k)   
     print(" ") 
    } 
    } 
} 

Für die letzten ... na ja ich "small" "small" "huge" "huge" so nicht sicher, ob ich bin, warum es nicht meine Ausgabe überein.

Und Sie sollten for Schleifen in R wie eine Pest vermeiden ... versuchen Sie etwas aus der apply Familie.

3
  1. Von R help für Kontrollfluss: next stoppt die Verarbeitung der aktuellen Iteration und rückt den Schleifenindex vor. Nach dem Drucken von "a" beginnt es wieder vom Anfang der for-Schleife, während der Index um 1 addiert wird. Wenn i = j (3 Gelegenheiten), werden 3 Sterne erzeugt; wenn | i-j | = 1 (4 Gelegenheiten), 4 * 2 Sterne werden produziert; und wenn | i-j | = 2 (2 Gelegenheiten), 2 * 3 Sterne werden produziert. Insgesamt 3 + 8 + 6 = 17 Sterne.
  2. Meine Ausgabe ist: „kleine“ „1“ „klein“ „5“ „riesig“ „9“ „großes“ „13“