Использование функции rep () для l oop? - PullRequest
1 голос
/ 17 июня 2020

Следующий код повторяет строку три раза, но функция rep () находится внутри для l oop. Основываясь на дизайне, я ожидал, что он будет повторять струну из горбов три раза, но вместо этого она повторяет всю строку. Я не понимаю, как это происходит. это из-за l oop? или это аргумент str_ c () или cat ()?

library(stringr)

humps <- c("five", "four", "three", "two", "one", "no")
for (i in humps) {
  cat(str_c("Alice the camel has ", rep(i, 3), " humps.",
    collapse = "\n"
  ), "\n")
  if (i == "no") {
    cat("Now Alice is a horse.\n")
  } else {
    cat("So go, Alice, go.\n")
  }
  cat("\n")
}

1 Ответ

2 голосов
/ 17 июня 2020

Я не уверен на 100% относительно вашего предполагаемого результата, но я все равно попробовал его:

humps <- c("five", "four", "three", "two", "one", "no")
for (i in humps) {
  cat(paste0("Alice the camel has ", paste(rep(i, 3), collapse = " "), " humps."), "\n")
  if (i == "no") {
    cat("Now Alice is a horse.\n")
  } else {
    cat("So go, Alice, go.\n")
  }
  cat("\n")
}

Ключ состоит в том, чтобы обернуть rep в функцию paste с collapse аргумент. Это превращает список в строку. В противном случае str_c - я также не уверен, почему вы использовали эту функцию здесь - запускается один раз для каждого элемента списка.

Это напечатает:

Alice the camel has five five five humps. 
So go, Alice, go.

Alice the camel has four four four humps. 
So go, Alice, go.

Alice the camel has three three three humps. 
So go, Alice, go.

Alice the camel has two two two humps. 
So go, Alice, go.

Alice the camel has one one one humps. 
So go, Alice, go.

Alice the camel has no no no humps. 
Now Alice is a horse.
...