-3

这是我的脚本:

a<-list("abcd")
b<-list("abcd_efgh")
c<-"abcd"
d<-"abcd_efgh"

if(grepl(a,b,fixed=TRUE))
{
    print("bug?")
}

if(grepl(c,d,fixed=TRUE))
{
    print("bug?")
}

我的输出:

> source('~/.active-rstudio-document')
[1] "bug?"
[1] "bug?"

由于我提供了'fixed=TRUE',我很困惑我错过了什么。这是 grepl 人的错误吗?

4

1 回答 1

1

这是预期的行为,请参阅grepl文档

grepl(pattern, x, ignore.case = FALSE, perl = FALSE,
fixed = FALSE, useBytes = FALSE)

pattern
包含要在给定字符向量中匹配 的正则表达式(或字符串)的字符串。fixed = TRUE如果可能,强制as.character转换为字符串。如果提供长度为 2 或更大的字符向量,则使用第一个元素并发出警告。regexpr除了和之外,允许缺少值gregexpr

fixed
合乎逻辑。如果TRUE, pattern 是一个要按原样匹配的字符串。覆盖所有冲突的参数。

因此,您正在搜索abcdin abcd_efgh,即true。设置时不需要完整的字符串匹配fixed=TRUE,只是模式中使用的所有字符不能是正则表达式元字符。

于 2015-10-27T12:51:16.727 回答