2017-06-02 39 views
1

我正在使用grep做一个不区分大小写的搜索,但问题是我得到所有包含该模式的值,而不仅仅是完全匹配,但是如果我使用fixed=TRUE会使ignore.case=TRUE参数无效。如何进行不区分大小写的搜索?

g = c("PLD3","PLD2","PLD2ABC","DTPLD2a") 
r = "pLd2" 
grep(r,g,ignore.case=TRUE,value=TRUE) 
>[1] "PLD2" "PLD2ABC" "DTPLD2a" 

grep(r,g,ignore.case=TRUE,value=TRUE,fixed=TRUE) 
>character(0) 

EDIT

r是用户输入,所以基本上可以为从30,000个基因的列表任何东西,也可以是所有小写,所有大写,或它们的混合物都是。 并以我列表g的元件可以是大写,小写或它们的混合物(它是15000左右的基因列表)

+2

也许只是将两者都转换为小写,并检查它是否相等? '克[tolower的(G)== tolower的(R)]'。 – lukeA

+0

完美地工作,谢谢 – Bea

回答

2

尝试

g = c("PLD3","PLD2","PLD2ABC","DTPLD2a") 
r <- 'pLd2' 
r2 <- paste('^', r, '$', sep = '') 
grep(r2 , g ,ignore.case = T, value=TRUE) 

[1] "PLD2" 

基本元字符^$强制grep在开始和结束时修复正则表达式。

+0

谢谢,对不起,我没有指定,'r'是用户输入,所以基本上它可以是任何东西。我将用此信息更新信息 – Bea

+1

我编辑了答案以反映您的更新 –

+0

谢谢,它的效果很好! – Bea