R Pro smyčku


Pro smyčky

Smyčka forse používá pro iteraci po sekvenci:

Příklad

for (x in 1:10) {
  print(x)
}

Toto je méně podobné forklíčovému slovu v jiných programovacích jazycích a funguje spíše jako metoda iterátoru, kterou lze nalézt v jiných objektově orientovaných programovacích jazycích.

Pomocí forcyklu můžeme provést sadu příkazů, jednou pro každou položku ve vektoru, poli, seznamu atd.

O seznamech a vektorech atd. se dozvíte v pozdější kapitole.

Příklad

Vytisknout každou položku v seznamu:

fruits <- list("apple", "banana", "cherry")

for (x in fruits) {
  print(x)
}

Příklad

Vytiskněte počet kostek:

dice <- c(1, 2, 3, 4, 5, 6)

for (x in dice) {
  print(x)
}

Smyčka fornevyžaduje, aby byla předem nastavena indexační proměnná, jako u whilesmyček.


Přestávka

Pomocí breakpříkazu můžeme zastavit smyčku dříve, než projde všemi položkami:

Příklad

Zastavte smyčku na "třešni":

fruits <- list("apple", "banana", "cherry")

for (x in fruits) {
  if (x == "cherry") {
    break
  }
  print(x)
}

Smyčka se zastaví na "třešni", protože jsme se rozhodli ukončit smyčku pomocí breakpříkazu, kdy xse rovná "třešeň" ( x == "cherry").


další

Pomocí nextpříkazu můžeme přeskočit iteraci bez ukončení cyklu:

Příklad

Přeskočit "banán":

fruits <- list("apple", "banana", "cherry")

for (x in fruits) {
  if (x == "banana") {
    next
  }
  print(x)
}

Když smyčka projde „banánem“, přeskočí ji a pokračuje ve smyčce.


Yahtzee!

If .. Else v kombinaci se smyčkou For

Abychom demonstrovali praktický příklad, řekněme, že hrajeme hru Yahtzee!

Příklad

Vytisknout "Yahtzee!" Pokud je počet kostek 6:

dice <- 1:6

for(x in dice) {
  if (x == 6) {
    print(paste("The dice number is", x, "Yahtzee!"))
  } else {
    print(paste("The dice number is", x, "Not Yahtzee"))
  }
}

Pokud smyčka dosáhne hodnot v rozmezí 1 až 5, vypíše „No Yahtzee“ a jeho číslo. Když dosáhne hodnoty 6, vypíše "Yahtzee!" a jeho číslo.


Vnořené smyčky

Smyčku můžete mít také uvnitř smyčky:

Příklad

Vytiskněte přídavné jméno každého ovoce v seznamu:

adj <- list("red", "big", "tasty")

fruits <- list("apple", "banana", "cherry")
  for (x in adj) {
    for (y in fruits) {
      print(paste(x, y))
  }
}