如何让 %like% 运算符不区分大小写

问题描述 投票:0回答:2

有没有办法将

%like%
包中的
datatable
运算符设置为不区分大小写?例如
'hello' %like% 'HELlo'
会匹配。

r data.table
2个回答
10
投票

不依赖

data.table
中的定义:

`%like%` <- function (x, pattern) { 
  stringi::stri_detect_regex(x, pattern, case_insensitive=TRUE)
}

data.table
将其定义为:

function (vector, pattern) 
{
    if (is.factor(vector)) {
        as.integer(vector) %in% grep(pattern, levels(vector))
    }
    else {
        grepl(pattern, vector)
    }
}

如果您愿意,您可以覆盖

factor
的情况,但这不是一个非常复杂的功能。其中没有“魔法”。

我使用

stringi
,因为它(对于我的工作)比内置字符串操作更强大,并且在后台提供了更多的功能。

您也可以将其定义为:

`%like%` <- function (x, pattern) { 
  grepl(pattern, x, ignore.case=TRUE)
}

(再次忽略

factor
的情况)如果你愿意的话。这样做你会失去矢量化的
pattern
,但是。

如果您不想压缩

%likeic%
data.table
的定义,请命名为
%like%
(例如,忽略大小写)。


0
投票

您可以使用

%ilike%
代替。这是在
grep
 中调用 
data.table

的便捷功能之一
© www.soinside.com 2019 - 2024. All rights reserved.