для l oop итерации по символьным значениям - PullRequest
1 голос
/ 02 марта 2020

Я новичок в R и пытаюсь привыкнуть к циклам. В настоящее время я решаю пару упражнений для практики, и в настоящее время я застрял в этом;

У меня есть вектор

v <- sample(c("cat", "dog", "mouse"), 100, replace = TRUE);

Теперь вопрос заключается в создании для l oop, который перебирает все значения 'v' и сколько значений собак найдено до этого момента. При достижении пятого значения «собака» вы должны остановиться. (после соответствующего отпечатка). Используйте break.

Начнем с того, что я не могу произвести первую итерацию, где я получаю вывод типа "1 n_dogs found". Кроме того, я не уверен, как посчитать количество найденных «собак» и взломать l oop после вывода пятого значения «собака». После нескольких попыток я закончил здесь (что не дает ничего близкого к желаемому результату)

for (index in 1:length(v)){
  if (v[index] == "dog"){
    print(sprintf("%s n_dogs found", v[index]));
    break;
  } else {
 print(sprintf("%s n_dogs found", v[index]));
  }
}

Я знаю, что это очень просто c, но любая помощь будет оценена.

Ответы [ 2 ]

1 голос
/ 02 марта 2020

Я думаю, вы можете попробовать приведенный ниже код, где for l oop завершается, как только пятая "собака" найдена

ndog <- 0
for (x in v) {
  if (x == "dog") {
    ndog <- ndog + 1
    print(sprintf("%s n_dogs found", ndog));
  }
  if (ndog == 5) break
}
1 голос
/ 02 марта 2020
v <- sample(c("cat", "dog", "mouse"), 100, replace = TRUE)

counter <- 0

for (value in v) {
  if (value == "dog") {
    counter <- counter + 1
    print(sprintf("%s n_dogs found", counter))
  }
  if (counter == 5) {
      break
  }
}

Вы можете использовать простой счетчик. Я также заменил традиционный l oop на for-each. Вам не нужно ломаться, это будет учитываться только до первого появления dog. если вам нужен только последний номер, увеличьте счетчик до l oop и просто напечатайте снаружи.

...