我正在尝试使用break和next in 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,并且只会使用第一个元素”。
答案 0 :(得分:2)
如果您查看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"