【问题标题】:How to grep a vector and return a single TRUE or FALSE?如何 grep 向量并返回单个 TRUE 或 FALSE?
【发布时间】:2012-07-14 04:09:47
【问题描述】:

R 中是否有一个 grep 函数,如果在给定字符向量中的任何位置找到模式,则返回 TRUE,否则返回 FALSE

我看到的所有函数都返回一个 vector 找到的每个元素的当前位置。

【问题讨论】:

  • 阅读 ?grep 将是一个很好的起点

标签: regex r


【解决方案1】:

可能是grepl()any() 的组合?

喜欢

> foo = c("hello", "world", "youve", "got", "mail")
> any(grepl("world", foo))
[1] TRUE
> any(grepl("hi", foo))
[1] FALSE  
> any(grepl("hel", foo))
[1] TRUE

关于您是否希望最后一个示例返回 true 的问题有点不清楚

【讨论】:

    【解决方案2】:

    也许您正在寻找grepl()

    > grepl("is", c("This", "is", "a", "test", "isn't", "it?"))
    [1]  TRUE  TRUE FALSE FALSE  TRUE FALSE
    

    第一个参数是您要查找的模式,第二个参数是您要匹配的向量,返回值是一个相同长度的布尔向量,描述该模式是否匹配每个元素。

    【讨论】:

    • 这是唯一真正回答问题的答案。
    【解决方案3】:

    您在寻找“任何”吗?

    > x<-c(1,2,3,4,5)
    > x==5
    [1] FALSE FALSE FALSE FALSE  TRUE
    > any(x==5)
    [1] TRUE
    

    请注意,您也可以对字符串执行此操作

    > x<-c("a","b","c","d")
    > any(x=="b")
    [1] TRUE
    > any(x=="e")
    [1] FALSE
    

    和apply结合起来会很方便:

    > sapply(c(2,4,6,8,10), function(x){ x%%2==0 }  )
    [1] TRUE TRUE TRUE TRUE TRUE
    > any(sapply(c(2,4,6,8,10), function(x){ x%%2!=0 }  ))
    [1] FALSE
    

    【讨论】:

    • 请注意,这种方法仅适用于精确匹配,而 OP 提到 grep 表明他正在寻找模式匹配。对于精确匹配,您也可以使用is.element,它是矢量化的。
    【解决方案4】:

    grepl 就是你要找的东西

    grepl("is", "This is grepl test")
    [1] TRUE
    grepl("is not", "This is grepl test")
    [1] FALSE
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-14
      • 1970-01-01
      • 2011-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      相关资源
      最近更新 更多