функции break и next в R для одного слова с помощью функции strsplit () - PullRequest
0 голосов
/ 02 февраля 2019

Я пытаюсь использовать разрыв и следующий цикл for, мой код выглядит следующим образом:

for(i in strsplit('chapter', '')){
  if(i == 'p'){
    break
  }
  print(i)
}

Ожидаемый вывод:

c
h
a

for(i in strsplit('chapter', '')){
  if(i == 'p'){
    next
  }
  print(i)
}

Ожидаемый вывод:

c
h
a
t
e
r

Но мой вывод для обоих вышеприведенных циклов:

[1] "c" "h" "a" "p" "t" "e" "r"
Warning message:
In if (i == "p") { :
  the condition has length > 1 and only the first element will be used
> 

Также я не понимаю сообщение с предупреждением, почему я это получаю.Я попробовал другой числовой пример:

x <- c(1,5,2,6,8,5,9,1)
for (val in x) {
  if (val == 5){
    next
  }
  print(val)
}

Вывод:

[1] 1
[1] 2
[1] 6
[1] 8
[1] 9
[1] 1
> 

Здесь, хотя число 5 находится в двух местах в векторе, вывод не показывает предупреждение "условие имеет длину> 1, и будет использоваться только первый элемент "

1 Ответ

0 голосов
/ 02 февраля 2019

Если вы посмотрите на вывод strsplit

strsplit('chapter', '')

#[[1]]
#[1] "c" "h" "a" "p" "t" "e" "r"

Это список длиной 1, и этот список имеет отдельные элементы.Поэтому, когда вы перебираете его в цикле for, вы просто перебираете первый элемент списка.Вам нужно выбрать первый элемент списка, а затем выполнить итерацию по каждому отдельному элементу.

strsplit('chapter', '')[[1]]
#[1] "c" "h" "a" "p" "t" "e" "r"

Вы получите требуемый вывод, если вы сделаете

for(i in strsplit('chapter', '')[[1]]){
   if(i == 'p'){
      break
   }
   print(i)
}

#[1] "c"
#[1] "h"
#[1] "a"

for(i in strsplit('chapter', '')[[1]]){
  if(i == 'p'){
     next
   }
  print(i)
}

#[1] "c"
#[1] "h"
#[1] "a"
#[1] "t"
#[1] "e"
#[1] "r"
...