我可以强制 R data.table %like% 使用 "fixed = TRUE" 吗?

Can I force R data.table %like% to use "fixed = TRUE"?

我有一个 data.table,我想确定特定字符列中是否存在一组代码。如图所示,我将模式作为值向量传递给 %like%。这种语法对我有用;但是,我想强制 %like% 函数将模式向量的每个元素视为文字,即不使用 . 作为正则表达式通配符。 data.table的手册说,对于like函数,可以设为fixed = TRUE。有没有一种方法可以使用 %like% 强制我的代码将 ... 视为文字而不是通配符?谢谢。 J

这有效但处理“。”错误地作为通配符:

Codes <- c("65E..|9OX..|9OX1.|9OX2.|9OX3.|9OXZ.|Xaa9G")

ActualCodes <- dt[code_id %like% Codes] 

这不是:

Codes <- c("65E..|9OX..|9OX1.|9OX2.|9OX3.|9OXZ.|Xaa9G")

ActualCodes <- dt[code_id %like% Codes, fixed = TRUE] 

如果您查看 ?'%like%' 的帮助页面,您应该会看到 like 有两种形式。您尝试使用的是中缀、tw0 参数版本,并且不接受 fixed =TRUE 参数。我确实尝试使用“un-ampersanded”版本但失败了。有效的方法是避开“固定”策略,而是使用字符 class 方法来获得“精确周期”:

DT = data.table(Name=c("65E..","65EXX","Xaa9G"), Salary=c(2,3,4))
DT
#---------------
    Name Salary
1: 65E..      2
2: 65EXX      3
3: Xaa9G      4


 
 DT[Name %like% "^Mar"]  # the example was copied from the help page
#Empty data.table (0 rows and 2 cols): Name,Salary
 Codes <- c("65E..|9OX..|9OX1.|9OX2.|9OX3.|9OXZ.|Xaa9G")
 DT[ Name %like%  Codes]
 #   Name Salary
#1: 65E..      2
#2: 65EXX      3       # WRONG, try again
#3: Xaa9G      4  

 
 Codes <- gsub("[.]", "[.]", Codes, fixed = TRUE)  #doesn't succeed
 Codes
#[1] "65E..|9OX..|9OX1.|9OX2.|9OX3.|9OXZ.|Xaa9G"  # wrong result, no matches

 Codes <- gsub("[.]", "[.]", Codes)   # remove "fixed", character class succeeds
 Codes
#[1] "65E[.][.]|9OX[.][.]|9OX1[.]|9OX2[.]|9OX3[.]|9OXZ[.]|Xaa9G"
 DT[ Name %like%  Codes]
# --- correct result----
    Name Salary
1: 65E..      2
2: Xaa9G      4   # SUCCESS