r вывести следующий элемент списка в цикле for - PullRequest
1 голос
/ 09 февраля 2020

Я хотел бы напечатать песню bottle (см. https://en.wikipedia.org/wiki/Ten_Green_Bottles).

Мой код l oop выглядит так:

number <- c("Ten", "Nine", "Eight", "Seven", "Six", "Five", "Four", "Three", "Two")
and_if <- ("And if one green bottle should accidentally fall,")

bottles <- function() {
  for (num in number) {
    cat(str_c(rep(num, 2), " green bottles hanging on the wall", collapse = "\n"), "\n", and_if, "\n", "There'll be", number[2], "green bottles hanging on the wall", "\n", "\n")
    if (num == "Two") {
   cat(str_c(rep("One green bottle hanging on the wall", 2), collapse = "\n"), "\n", and_if, "\n", "There'll be no green bottles hanging on the wall", "\n", "\n")     
    }
  }
}

bottles()

И результат такой:

Ten green bottles hanging on the wall
Ten green bottles hanging on the wall 
 And if one green bottle should accidentially fall, 
 There'll be Nine green bottles hanging on the wall 

Nine green bottles hanging on the wall
Nine green bottles hanging on the wall 
 And if one green bottle should accidentially fall, 
 There'll be Nine green bottles hanging on the wall 

Eight green bottles hanging on the wall
Eight green bottles hanging on the wall 
 And if one green bottle should accidentially fall, 
 There'll be Nine green bottles hanging on the wall 

... (и так далее) .. .


One green bottle hanging on the wall
One green bottle hanging on the wall 
 and if one green bottle should accidentally fall, 
 There'll be no green bottles hanging on the wall 

Итак, на данный момент в последней строке каждого абзаца написано «На стене будет висеть девять зеленых бутылок» (за исключением одного пункта bottle). То, что я хотел бы иметь следующий номер из списка, а не всегда "Девять". Я думаю, вы понимаете, о чем я.

Это не кажется слишком сложным, но я просто не смог найти ответ .. Можете ли вы помочь мне? Спасибо!

1 Ответ

1 голос
/ 09 февраля 2020

Это может быть зациклено по последовательности, а затем извлечь значение на основе индекса

library(stringr)
bottles <- function() {
  for (i in seq_along(number)) {
    cat(str_c(rep(number[i], 2), " green bottles hanging on the wall", collapse = "\n"), "\n", and_if, "\n", "There'll be", replace(number[i+1], is.na(number[i+1]), "no"), "green bottles hanging on the wall", "\n", "\n")
    if (i == length(number)) {
   cat(str_c(rep("One green bottle hanging on the wall", 2), collapse = "\n"), "\n", and_if, "\n", "There'll be no green bottles hanging on the wall", "\n", "\n")     
    }
  }
}

bottles()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...