|是否提供了一个字符串来检测|

name = "KKSWAP"
stringr::str_starts(name, "RTT|SWAP")

返回TRUE,但是

str_starts(name, "SWAP|RTT")

返回FALSE

这种行为似乎是错误的,因为KKSWAP不是以"RTT"或"SWAP"开头的.我认为这两种情况都是错误的.

推荐答案

原因可在函数代码中找到:

function (string, pattern, negate = FALSE) 
{
    switch(type(pattern), empty = , bound = stop("boundary() patterns are not supported."), 
        fixed = stri_startswith_fixed(string, pattern, negate = negate, 
            opts_fixed = opts(pattern)), coll = stri_startswith_coll(string, 
            pattern, negate = negate, opts_collator = opts(pattern)), 
        regex = {
            pattern2 <- paste0("^", pattern)
            attributes(pattern2) <- attributes(pattern)
            str_detect(string, pattern2, negate)
        })
}

您可以看到,它将"^"粘贴在parttern前面,因此在您的示例中,它会查找"^RR | SWAP"并找到"SWAP".

如果要查看多个图案,应使用矢量:

name <- "KKSWAP"
stringr::str_starts(name, c("RTT","SWAP"))
# [1] FALSE FALSE

如果你只想要一个答案,你可以加上any()

name <- "KKSWAP"
stringr::str_starts(name, c("RTT","SWAP"))
# [1] FALSE

stringr::str_starts()的优点是模式参数的矢量化,但如果您不需要它,正如TTS所建议的那样,grepl('^RTT|^SWAP', name)是一个很好的base R替代方案.

或者,jpsmith建议的基函数startsWith()同时提供矢量化和|选项:

startsWith(name, c("RTT","SWAP"))
# [1] FALSE FALSE

startsWith(name, "RTT|SWAP")
# [1] FALSE

R相关问答推荐

在Julia中调用R函数

使用Shiny组合和显示复制和粘贴的数据

如何使用geom_sf在边界显示两种 colored颜色 ?

使用ggplot将平滑线添加到条形图

如何使用shinyChatR包配置聊天机器人

如何根据条件计算时差(天)

筛选出以特定顺序患病的个体

R Sapply函数产生的值似乎与for循环方法略有不同

条形图和在Ploly中悬停的问题

即使硬币没有被抛出,也要保持对其的跟踪

如何用书面利率绘制geom_bar图

将二进制数据库转换为频率表

在GG图中绘制射线的自动程序

将标识符赋给事件序列,避免错误观察

R -使用矩阵reshape 列表

如何使这些react 表对象相互独立?

如何在ggplot2中创建多个y轴(每个变量一个)

使用shiny 中的所选要素行下拉菜单

网络抓取新闻标题和时间

需要一个函数来在第一行创建一个新变量,然后用新变量替换一个不同的变量(对于多行)