r - 使用 strsplit() 函数在 R 中对单个单词进行 break 和 next 函数
问题描述
我正在尝试在 for 循环中使用 break 和 next,我的代码如下:
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,并且只使用第一个元素”
解决方案
如果你看一下输出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"
推荐阅读
- apollo - 我们应该总是使用钩子还是可以直接从客户端调用它?
- c - C 或汇编中是否有可用的定点表示
- unity3d - Unity ARFoundation - 增强对象不记录碰撞
- mysql - 从 MySQL 中分组和连接表的特定行中选择数据
- faust - 浮士德。如何创建压缩主题
- sql - 使用 FILTER 对链接表值进行 SQL 条件聚合
- apache-flink - Flink keyBy 操作符直接进入 sink
- c++ - 如何使用 C++ 初始化向量;脚本值不是数组、指针或向量错误
- android - 如何在 react-native Android 应用程序中将调试器附加到发布版本的本机代码?
- javascript - 如何获取 Google 幻灯片标题和幻灯片编号的列表 - Google Apps 脚本